进程相关命令和函数

news2024/9/23 19:21:26

查询进程相关命令

ps aux

查看进程相关信息


1.就绪态、运行态 R
2.睡眠态、等待态
可唤醒等待态 S
不可唤醒等待态 D
3.停止态 T
4.僵尸态 Z
5.结束态


top


根据CPU占用率查看进程相关信息

kill 和killall

kill和killall发送一个信号
kill -2 PID  15
发送信号+PID对应的进程,默认接收者关闭

killall -9 进程名
发送信号 进程名对应的所有进程
killall a.out

进程相关函数

fork

pid_t fork(); //叉子

一次调用,会返回两次。
子进程先运行和是父进程先进程,顺序不确定。
变量不共享。
子进程复制父进程的0到3g空间和父进程内核中的PCB,但id号不同。

  • 功能

通过该函数可以从当前进程中克隆一个同名新进程。
克隆的进程称为子进程,原有的进程称为 父进程。
子进程是父进程的完全拷贝。
子进程的执行过程是从fork函数之后执行。
  
子进程与父进程具有相同的代码逻辑。

  • 返回值

int 类型的数字。
在父进程中:成功 返回值是子进程的pid号 >0        失败 返回-1;
在子进程中:成功 返回值 0        失败 无

父子进程的关系:
子进程是父进程的副本。子进程获得父进程数据段,堆,栈,正文段共享。

在fork之后,一般情况那个会先运行,是不确定的。如果非要确定那个要先运行,需要IPC机制。

区别:
1)fork的返回值
2)pid不同

getpid

pid_t getpid(void);
  • 功能

获得调用该函数进程的pid

  • 参数

缺省

  • 返回值

进程的pid

getppid

pid_t getppid(void);
  • 功能

获得调用该函数进程的父进程pid号

  • 参数

缺省

  • 返回值

返回父进程id号

进程的终止

8种情况
1)main 中return
2)exit(), c库函数,会执行io库的清理工作,关闭所有的流,以及所有打开的文件。已经清理函数(atexit)。
3)_exit,_Exit 会关闭所有的已经打开的文件,不执行清理函数。
4) 主线程退出
5)主线程调用pthread_exit
异常终止
6)abort()
7)signal   kill pid
8)最后一个线程被pthread_cancle

进程的退出
 

僵尸进程和孤儿进程

僵尸进程:进程执行结束但空间未被回收变成僵尸进程

  • 僵尸进程 是已经结束但未被父进程回收的进程,虽然不占用大量系统资源,但占用进程表,需父进程及时处理。
  • 孤儿进程 是父进程结束后仍在运行的子进程,会被 init 进程接管,正常运行,不会对系统造成危害。


exit     

库函数
退出状态,终止的进程会通知父进程,自己使如何终止的。如果是正常结束(终止),则由exit传入的参数。如果是异常终止,则有内核通知异常终止原因的状态。任何情况下,负进程都能使用wait,waitpid获得这个状态,以及资源的回收。

void exit(int status);
exit(1);
  • 功能

让进程退出,并刷新缓存区

  • 参数

status:进程退出的状态

  • 返回值

缺省

  • 退出状态码

EXIT_SUCCESS 0表示成功。程序正常结束,操作系统认为该进程成功完成了所有任务
EXIT_FAILURE 1通常表示某种错误或异常。具体的含义取决于程序的设计和约定

exit -> 刷新缓存区 -> atexit注册的退出函数 -> _exit


return

return  当该关键字出现在main函数中时候可以结束进程
如果在其他函数中则表示结束该函数。



_exit    

系统调用

void _exit(int status);
  • 功能

让进程退出,不刷新缓存区

  • 参数

status:进程退出状态

  • 返回值

缺省



atexit

int atexit(void (*function)(void));
  • 功能

注册进程退出前执行的函数

  • 参数

function:函数指针
指向void返回值void参数的函数指针

  • 返回值

成功返回0
失败返回非0

当程序调用exit或者由main函数执行return时,所有用atexit注册的退出函数,将会由注册时顺序倒序被调用

进程空间的回收

wait

wait/waitpid
进程退出

pid_t wait(int *status);
  • 功能

该函数可以阻塞等待任意子进程退出并回收该进程的状态。
  一般用于父进程回收子进程状态。(一次只回收一个)

  • 参数

status 进程退出时候的状态
如果不关心其退出状态一般用NULL表示
如果要回收进程退出状态,则用WEXITSTATUS回收。

  • 返回值

成功 回收的子进程pid
失败 -1;

int status;
pid_t pid = wait(&status);
  • 宏函数

WIFEXITED(status)  是不是正常结束
检查子进程是否是通过调用 exit() 或者 return 正常退出的。如果是正常退出,返回非零值 

WEXITSTATUS(status) 使用这个宏去拿返回值
当子进程正常结束时,可以用这个宏获取子进程的退出状态码(即子进程在 exit() 函数中传递的值8个bit位以内)。在 WIFEXITED(status) 为真时使用,用于获取子进程的退出码(exit() 或者 return 的值)。

wait() 函数中,status 是一个整型变量,用来保存子进程的终止状态。这个状态信息被编码在一个整数中,其中包括退出状态码、信号信息等。

对于正常退出的子进程,status 的高位存储的是子进程的退出码,而低位则用于标识子进程的其他状态信息。

如果子进程正常退出,status 的值可以用以下公式表示:status = exit_code << 8


WIFSIGNALED(status) 是不是收到了信号而终止的
如果返回非零值,表示子进程是因为接收到一个未捕获的信号而终止 。检查子进程是否是因为接收到一个未捕获的信号而终止。如果是信号终止,返回非零值             

WTERMSIG(status)如果是信号终止的,那么是几号信号。

WIFSIGNALED(status) 为真时使用,用于获取导致子进程终止的信号编号

pid_t wait(int *status);

1)如果所有的子进程都在运行,在阻塞
2)如果一个子进程终止,正在等待的父进程则获得终止状态,获得子进程的状态后,立刻返回。
3)如果没有子进程,则立即出错退出。

waitpid

waitpid(-1,status,0)=wait(status);
pid_t waitpid(pid_t pid, int *status, int options);

< -1 回收指定进程组内的任意子进程
-1 回收任意子进程,组内外
0 回收和当前调用waitpid一个组的所有子进程,组内
> 0 回收指定ID的子进程

  •  参数说明

pid:

pid > 0: 等待特定的子进程,其进程 ID 为 pid

pid == 0: 等待任意子进程,其进程组 ID 与调用进程相同。

pid < -1: 等待特定进程组的任意子进程,其进程组 ID 为 -pid

pid == -1: 等待任意子进程(这与 wait 的行为相同)。

status:

一个指向整数的指针,用于存储子进程的退出状态。如果你不关心子进程的退出状态,可以传递 NULL

options:

0: 默认行为,调用进程会阻塞,直到一个子进程结束。

WNOHANG: 非阻塞模式。如果没有子进程结束,waitpid 会立即返回 0,而不会阻塞。

  • 返回值

成功: 返回被收集的子进程的 PID。

失败: 返回 -1,并设置 errno 以指示错误。

waitpidwait 的关系
  • wait(a) 等价于 waitpid(-1, a, 0),即等待任意子进程结束并阻塞,直到有子进程结束。
  • waitpid(-1, a, 0) 会阻塞等待任意一个子进程结束,返回结束的子进程 PID,并将其退出状态存储在 a 中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2057152.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

又一实锤 美元丧钟敲响

文&#xff5c;琥珀食酒社 作者 | 积溪 咱们又要见证历史了 之前我说美元霸权快终结了 没想到马上又来了一个实锤 就在刚刚 “159个国家将采用金砖国家新支付系统“的消息 冲上热搜 据大毛媒体爆料 这个新支付系统 将在今年10月份上线 替代现有的swift系统 这是要挖…

nginx的详细介绍及配置

Nginx&#xff08;发音为“engine X”&#xff09;是一个高性能的HTTP和反向代理服务器&#xff0c;也是一个IMAP/POP3/SMTP代理服务器。Nginx以其稳定性、丰富的功能集、简单的配置和低资源消耗而闻名。它最初由俄罗斯人Igor Sysoev编写&#xff0c;并于2004年首次公开发布。N…

解决旧版CMS内容管理无法登录的问题

最近遇到了输入正确的账户密码&#xff0c;旧版的CMS内容管理的平台提示登录成功却无法跳转的问题 遇到这种情况请不要慌&#xff01;&#xff01;&#xff01; 请按照下面的步骤解决问题&#xff1a; 1.点击账号管理 2.点击右上角的返回旧版控制台 3.点击cloud1环境 4.点击扩…

财务会计与管理会计(十一)

文章目录 快速切换日记账余额SUMPRODUCT、LOOKUP函数应用 销售业绩分段统计表SUMPRODUCT函数的应用 自动打印发票签收单VLOOKUP函数的应用 快速切换日记账余额 SUMPRODUCT、LOOKUP函数应用 C2SUMPRODUCT((A5:A100B2)*C5:C100) D2SUMPRODUCT((A5:A100B2)*D5:D100) E4公式1&…

javaweb学习之HTML(一)

推荐学习使用网站 w3school 在线教程 认识HTML HTML&#xff08;HyperText Markup Language&#xff09;是超文本标记语言&#xff0c;它是一个用于创建网页和网页应用程序的标准标记语言。HTML文档由一系列的元素&#xff08;elements&#xff09;组成&#xff0c;这些元素通…

大模型日报|10 篇必读的大模型论文

大家好&#xff0c;今日必读的大模型论文来啦&#xff01; 1.斯坦福推出大模型网络安全能力和风险评估框架 Cybench 用于网络安全的语言模型智能体&#xff08;agent&#xff09;能够自主识别漏洞并执行漏洞利用&#xff0c;有可能对现实世界造成影响。政策制定者、模型提供者…

海外媒体投稿:怎样在法国媒体发稿宣传中获得成功

法国是一个充满机遇的销售市场&#xff0c;而媒体发稿营销推广是企业在法国市场里扩张曝光度和提升知名度的有效途径。下面我们就共享如何运用低投资得到高收益的办法&#xff0c;帮助企业在法国媒体发稿推广过程中获得成功。 第一步&#xff1a;掌握目标群体在进行法国媒体发稿…

HCIP-交换实验

根据实验要求&#xff0c;完成实验内容&#xff1a; 实验拓扑图如下所示 &#xff1a; 搭建拓补图&#xff1a; LSW1&#xff0c;LSW2&#xff1a; [LS1]interface Eth-Trunk 0 [LS1-Eth-Trunk0]q [LS1]interface g0/0/3 [LS1-GigabitEthernet0/0/3]eth-trunk 0 [LS1]interf…

微信支付商家转账到零钱申请必过方案总结

商家在申请商家转账到零钱时总会遇到各种原因的驳回&#xff0c;不少商家不断的修改又产生新的驳回原因从而导致工期无限延长&#xff0c;本文根据我们上万次成功申请商家转账到零钱的经验整理&#xff0c;帮助商家可以快速过审&#xff1a; 准备工作和注意事项 - 确认主体资格…

mq-fanout交换机

交换机 交换机是什么?步骤 交换机本身具备路由功能 消息先发到交换机,交换机在路由到队列,消费者监听队列拿到消息 广播模式是什么 是什么 例如:每个微服务创建队列,订单服务只启动1台,1个消费者,订单 怎么创建 创建一个队列 -交换机里type-选择模式(广播模式) 在交换…

AMD为何花49亿美元收购ZT Systems?

是的&#xff0c;是不是很震惊&#xff01; 苏妈再次出手&#xff0c;在美国当地时间8月19日&#xff0c;AMD同意用价值49亿美元的现金和股票收购ZT Systems——这笔费用超过了AMD 2024年预期在数据中心GPU销售总额。 从收购的金额我们就能看出这笔收购的重要性。 但为什么AM…

NGINX常用指令及其防盗链

目录 1 NGINX的指令及其应用 1.1 if指令 1.2 set 指令 - 实现变量定义 1.3 break 指令 1.4 return 指令 1.5 rewrite 指令 1.5.1 Nginx rewrite 介绍 1.5.2 Nginx rewrite 语法 1.5.3 rewrite 指令结尾的 flag 标记说明 2 域名永久与临时重定向 2.1 永久重定向301 2.2 临时重…

同行聚势,喆啡酒店11周年熠熠生辉

当下酒店与消费者之间已超越传统服务关系&#xff0c;在旅途中彼此相伴&#xff0c;相互支持&#xff0c;并肩前行&#xff0c;喆啡酒店作为生活方式酒店的标杆品牌&#xff0c;超百万忠诚消费者正是其品牌旅伴。十一年发展旅程&#xff0c;喆啡酒店携手万千消费者&#xff0c;…

Mantel Test分析与绘图

目录 1.前言 2.步骤 3.在R语言中&#xff0c;除了mantel_test函数&#xff0c;还有其他几个工具和方法可以用于进行Mantel Test分析&#xff1a; 4.利用ggcor包在进行Mantel Test分析 5.使用ggcor包进行Mantel Test分析 6.两个距离矩阵的行名和列名不完全相同的处理方法 …

一个BUG搞懂ThreadLocal、InheritableThreadLocal、TransmittableThreadLocal

首发公众号&#xff1a;赵侠客 引言 最近我收到一个非常诡异的线上BUG&#xff0c;触发BUG的业务流程大概是这样的&#xff1a;A系统新建任务数据需要同步到B系统&#xff0c;数据是多租户的&#xff0c;比如C租户在A系统新建了一条任务&#xff0c;那么C租户登录B系统后会看到…

基于springboot和vue的酒店管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图详细视频演示技术栈系统测试为什么选择我官方认证闲鱼玩家&#xff0c;服务很多代码文档&#xff0c;百分百好评&#xff0c;战绩可查&#xff01;&#xff01;入职于互联网大厂&#xff0c;可以交流&#xff0c;共同进步。有保障的售后 代码参考数据…

《黑神话.悟空》:一场跨越神话与现实的深度探索

《黑神话.悟空》&#xff1a;一场跨越神话与现实的深度探索 在国产游戏日益崛起的今天&#xff0c;《黑神话.悟空》以其独特的剧情、丰富的人物设定和深刻的主题&#xff0c;成为了无数玩家翘首以盼的国产3A大作。这款游戏不仅是一次对传统故事的创新演绎&#xff0c;更是一场对…

oracle日常巡检命令

一、日常巡检命令 1、检查Oracle实例状态 SQL> set pages 600 lines 600 SQL> select instance_name,host_name,startup_time,status,database_status from v$instance; 说明&#xff1a;“STATUS”表示Oracle当前的实例状态&#xff0c;必须为“OPEN”&#xff1b;“…

中国软件评测中心:2024最新人工智能大语言模型技术发展研究报告 (附文档)

人工智能作为引领新一轮科技产业革命的战略性技术和新质生产力重要驱动力&#xff0c;正在引发经济、社会、文化等领域的变革和重塑&#xff0c;2023 年以来&#xff0c;以 ChatGPT、GPT-4 为代表的大模型技术的出台&#xff0c;因其强大的内容生成及多轮对话能力&#xff0c;引…

swift微调款框架使用自定义数据集进行通义千问1.5的微调

使用自定义数据集进行通义千问1.5的 Swift 微调 模型训练手册文档 通义千问&#xff08;T2IQA&#xff09;是一个基于Transformer架构的问答系统&#xff0c;本文将介绍如何使用自定义数据集对Swift语言版本的通义千问进行微调&#xff0c;以适应特定的问题和领域。 swift微…