进程终止
进程终止
- 正常执行完
- 结果正确 退出码为0
- 结果不正确 退出码非0 每种数字代表一种错误原因
- 命令 echo $? 拿到上一个进程的退出码
- 系统接口 char*strerror(int errnum);
- 崩溃了 (进程异常)
例如 野指针 写入不该写入的区域
崩溃的本质:因为某些原因,导致进程收到了来自操作系统的信号,如 kill -9
进程等待
- 等待:通过系统调用,获取子进程退出码或退出信号的方式,顺便释放内存
- 接口 :
- pid_t wait(int *status);
- 头文件
#include<sys/types.h>
#include<sys/wait.h> - 参数
status 一般设为NULL
- 头文件
- pid_t wait(pid_t pid, int* status ,int options)
-
头文件
#include<sys/types.h>
#include<sys/wait.h> -
参数
pid:
如果pid>0 为等待特定的子进程
如果pid==-1,为等待任意一个子进程 效果与wait函数相同
status:
输出型参数 一种退出码+信号的表示等待子进程结束状态的方式
options :
0(默认) 阻塞等待
WNOHONG 非阻塞等待
如果第七位为0 代表没有收到信号 即正常退出 否则为非正常退出 -
返回值
如果options 为0
如果成功 返回子进程的PID 否则返回-1
如果options 为WNOHONG
如果成功 返回子进程PID 如果子进程存在但没有结束 返回0 如果出错 返回-1
进程替换
- 接口
#include<unistd.h>- int excle(const charpath, const char arg, …);
- 参数
path 一个路径 代表你要执行的程序的位置
arg 代表你要执行的方式 - 返回值
如果有返回值 一定是失败的 而如果替换成功 则不会有返回值
- 参数
- int execv(const charpath,char const argv[]);
- 参数
path 仍是路径
argv 一个数组指针 即命令行指针 与main函数中的argv[]等同
- 参数
- int execlp(const charfile, const char arg, …);
- 参数
file 指定程序名 操作系统自动在PATH里面找(使用该函数的前提是其存在于PATH中)
- 参数
- int execle(const charpath, const char arg,…,char* const envp[])
envp 自定义环境变量
- int excle(const charpath, const char arg, …);
-
- pid_t wait(int *status);