进程控制

进程创建

fork

进程终止

man perror(错误码)
man 3 perror
哪些情况?
正常退出(echo $? 查看程序的退出码)
从main函数return退出
调用exit
_exit
exit 会刷新缓冲区,执行atexit(fun)定义的清理函数
_exit 不会刷新缓冲区
atexit(fun)
异常退出
内存访问越界
访问空指针

进程等待

wait: 头文件 <sys/wait.h>
pid_t wait(int status)
返回值 : 正常 > 0
异常 -1
参数: int
status
输入型参数 int
输出型参数 int&
输入输出型 int*
阻塞 非阻塞
阻塞 : 发起一个调用, 条件没有具备,就一直等待
非阻塞 : 发起一个调用,条件没有具备,就返回一个结果
pid_t waitpid(pid_t pid, int* status, int options)
返回值:
失败 -1
没有等待子进程退出 0
等待到子进程退出 >0
参数 : -1 等待任一子进程
>0 等待特定的子进程
options:
0 阻塞
WNOHANG 非阻塞
用非阻塞去等待子进程退出,搭配while使用
获取进程status(16个比特位)
正常退出 (st>>8)&0XFF
异常退出st&0X7F

进程程序替换

替换函数
原理: 替换数据段和代码段为替换程序的数据段和代码段,并更新堆栈信息
exec函数 (只有在函数执行失败的时候才会返回值, 返回-1)
int execl(const char* path, const char* arg…)
带l: 可变参数列表
path : 要替换程序的路径/建议绝对路径
arg :
先写可执行程序的名称
以NULL结尾
int execlp(const char* file, const char* arg…)
带p : 以直接给程序的名称,自动搜索环境变量
file可以直接给程序的名称,也可以带上路径
int execle(const char* path, const char* arg…,char* const envp)
带e:需要自己组织环境变量的内容
envp:给当前所要替换的程序设置环境变量
int execv(const char *path, char *const argv[])
带v : 参数用数组,以NULL结尾
int execvp(const char *file, char *const argv[])
前五个都是库函数,最终都会调用execve
int execve(const char *file, char *const argv[]) 系统调用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值