高端网站建设公司有必要做吗学做网站论坛第六节
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、进程状态
进程常见状态:
- 运行状态 
- 系统当前进程
 - 就绪状态进程
 - ps命令的STAT列为值R
 
 - 等待状态 
- 等待事件性
 - 等待系统资源
 - ps命令的STAT列为值S
 
 - 停止状态 
- ps命令的STAT列为值T
 
 - 僵尸状态 
- 进程终止或结束
 - 在进程表项中仍有记录
 - ps命令的STAT列为值Z
 
 
8、进程调度
8.1、操作步骤
- 第一步:处理内核中的工作
 - 第二步:处理当前进程
 - 第三步:选择进程 
- 实时进程
 - 普通进程
 
 - 第四步:进程交换
 
8.2、task_struct中的调度信息:
- 策略 
- 轮流策略
 - 先进先出策略
 
 - 优先权 
- Jiffies变量
 
 - 实时优先权 
- 实时进程之间
 
 - 计数器
 
8.3、进程状态变化关系
  
9、回收方式:
1. init进程回收 -> 僵尸进程 孤儿进程
2. wait函数回收 -> 阻塞 等待SIGCHLD信号
3. signal信号回收->当子进程结束,内核会发射SIGCHLD信号到对应的父进程中。
(signal信号:linux内核当中,有若干种信号,比如SIGINT,SIGCHLD,SIGALRM……,内核中,会产生或监听若干信号,若一个进程,监听了一个信号,则当发生该信号时,此进程会将当前进度暂停。 SIGINT->ctrl +c),

![]()
注:Sleep函数会被信号唤醒
