Linux编程3.3 进程-进程的终止

1、正常终止

  • 从main函数返回
  • 调用exit(标准C库函数)
  • 调用_exti或_Exit(系统调用)
  • 最后一个线程从其启动例程返回
  • 最后一个线程调用 pthread exit

2、异常终止

  • 调用abort
  • 接受到一个信号并终止
  • 最后一个线程对取消请求做处理响应

3、进程返回

  • 通常程序运行成功返回0,否则返回非0
  • 在shll中可以查看进程返回值(echo $?)

4、atexit函数

#include<stdlib.h>
int atexit(void (*function)(void));
返回:成功返回0,出错返回-1
功能:向内核登记终止函数
  • 每个启动的进程都默认登记了一个标准的终止函数
  • 终止函数在进程终止时释放进程所占用的一些资源
  • 登记的多个终止函数执行顺序是以栈的方式执行,先登记的后执行。

 示例:

 

5、进程终止方式区别

return

exit()

_exit()/Exit()

是否刷新标准I/O缓存

是否自动调用终止函数

6、进程启动和退出

   

7、查看系统中的进程

7.1、ps指令

通常可以查看到:进程的ID、进程的用户ID、进程状态和进程的Command

示例:

ps -ef

ps -aux|more 查看进程资源占用情况

7.2、ps输出的信息

  • USER            进程的属主;
  • PID              进程的ID;
  • PPID              父进程的ID;
  • %CPU             进程占用的CPU百分比;
  • %MEM            占用内存的百分比;
  • NI                  进程的NICE值,数值大,表示较少占用CPU时间;
  • VSZ               进程虚拟大小;
  • RSS                驻留中页的数量;
  • TTY                终端ID;
  • WCHAN        正在等待的进程资源;
  • START            启动进程的时间;
  • TIME              进程消耗CPU的时间;
  • COMMAND 命令的名称和参数;

7.3、进程状态

进程常见状态:

  • 运行状态
    1. 系统当前进程
    2. 就绪状态进程
    3. ps命令的STAT列为值R
  • 等待状态
    1. 等待事件性
    2. 等待系统资源
    3. ps命令的STAT列为值S
  • 停止状态
    1. ps命令的STAT列为值T
  • 僵尸状态
    1. 进程终止或结束
    2. 在进程表项中仍有记录
    3. ps命令的STAT列为值Z

8、进程调度

8.1、操作步骤

  • 第一步:处理内核中的工作
  • 第二步:处理当前进程
  • 第三步:选择进程
    1. 实时进程
    2. 普通进程
  • 第四步:进程交换

8.2、task_struct中的调度信息:

  • 策略
    1. 轮流策略
    2. 先进先出策略
  • 优先权
    1. Jiffies变量
  • 实时优先权
    1. 实时进程之间
  • 计数器

8.3、进程状态变化关系

 

9、回收方式:

              1. init进程回收 -> 僵尸进程 孤儿进程

              2. wait函数回收 -> 阻塞 等待SIGCHLD信号

              3. signal信号回收->当子进程结束,内核会发射SIGCHLD信号到对应的父进程中。

(signal信号:linux内核当中,有若干种信号,比如SIGINT,SIGCHLD,SIGALRM……,内核中,会产生或监听若干信号,若一个进程,监听了一个信号,则当发生该信号时,此进程会将当前进度暂停。     SIGINT->ctrl +c),

注:Sleep函数会被信号唤醒

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值