异常控制流二(进程控制fork,waitpid)

1.进程的三种状态:

①运行:要么在CPU上执行,要么等待被执行,最终被内核调度。

②停止:被挂起,不会被调度。收到SIGSTP,SIGSTOP,SIGTTIN,SIGTTOUT等信号时,进程停止直到收到SIGCONT。

③终止:收到一个信号/从主程序返回/调用exit

#include <stdlib.h>

void exit( int status);//status是退出状态

2.创建一个新的子进程fork():

  • 相同但是独立的地址空间:子进程得到与父进程虚拟地址空间相同(但是独立)的一份拷贝(文本、数据和bss段、堆、用户栈),打开文件描述符的拷贝。PID不同
  • 调用一次,返回给父进程(PID)和子进程(0)各一次。
  • 父进程、子进程并发执行
  • 共享文件
#include <sys/types.h>
#include <unistd.h>

pid_t fork(void);//子进程返回0,父进程返回子进程PID,出错返回-1

3.回收子进程:

  • 进程终止->僵死进程->回收抛弃
  • 如果父进程没有回收子进程就终止,init进程(PID=1)来回收
  • 进程可以waitpid等待子进程终止或停止:

①options=0,挂起调用进程,等集合中一个子进程终止为止,返回PID。

②pid=-1,集合中所有子进程

③options=WNOHANG:默认挂起,但是立即返回(没有子进程终止,返回0),等的同时可以做别的事

④options=WUNTRACED:挂起,集合中一个子进程终止/停止(返回PID)

⑤options=WNOHANG|WUNTRACED:立即返回,不等,有终止/停止返回PID,没有返回0

⑥调用进程没有子进程:-1,errno=ECHILD,waitpid被信号中断:-1,errno=EINTR

#include <sys/types.h>
#include <sys/wait.h>

pid_t waitpid(pid_t pid, int *status,int options);//成功:子进程PID,WNOHANG:0,其他error:-1

4.检查回收子进程的退出状态:

WIFEXITED(status):eixt或return正常终止

WEXITSTATUS(status):正常终止子进程退出状态

WIFSIGNALED(status):未被捕获的信号而终止

WTERMSIG(status):导致子进程终止的信号编号

WIFSTOPPED(status):子进程停止

WSTOPSIG(status):引起子进程停止的信号数量

#include <sys/types.h>
#include <sys/wait.h>
pid_t wait(int* status);
//等价于waitpid(-1,&status,0)

5.让进程休眠:

sleep():进程挂起一段时间,时间到了返回0,否则剩余秒数(可能被信号中断)

#include <unistd.h>
usigned int sleep(unsigned int secs);

pause():挂起直到收到一个信号

#include <unistd.h>
int pause(void);

6.加载并允许一个程序fork() execve()

当前进程上下文中加载并允许一个程序,覆盖当前地址空间,没有新进程

#include <unistd.h>
int execve(const char *filename, const char *argv[], const char *envp[]);//成功不返回,错误-1

总结自《深入理解计算机系统第2版》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hnu哈哈

请接受直女的么么哒????

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值