进程与线程相关知识详解
1. 进程终止
进程的终止方式有两种:
- 主动终止 :调用 exit(3) 函数。
- 被动终止 :接收到未处理的信号。其中, SIGKILL 信号无法被处理,会直接杀死进程。
无论哪种方式终止进程,都会停止所有线程、关闭所有文件描述符并释放所有内存。系统会向父进程发送 SIGCHLD 信号,告知子进程已终止。
进程有返回值,正常终止时返回 exit 函数的参数,被信号杀死时返回信号编号。在 shell 脚本中,可通过返回值判断程序执行结果,通常 0 表示成功,其他值表示失败。
父进程可使用 wait(2) 或 waitpid(2) 函数收集子进程的返回值。但在子进程终止到父进程收集返回值之间会有延迟,此时子进程会成为僵尸进程,在 ps 和 top 命令中显示为状态 Z 。若父进程未能及时收集返回值,僵尸进程会占用资源,最终可能导致无法创建新进程。
以下是一个进程创建和终止的示例代码:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h
超级会员免费看
订阅专栏 解锁全文
1647

被折叠的 条评论
为什么被折叠?



