异常控制流中的进程控制

1.获取进程ID

每个进程都有一个唯一的正数(非零)进程ID(PID)。
getpid函数返回调用进程的PID,getppid函数返回它的父进程PID。

2.创建和终止进程

调用exit函数来终止进程
父进程调用fork 函数创建一个新的运行的子进程
fork函数只被调用一次,返回两次:一次在调用进程(父进程)中,一次在新创建的子进程中。
实例:

int main{
	pid_t pid;
	int x=1;
	pid=Fork();
	if(pid==0){
		printf("child:x=%d\n",++x);
		exit(0);
	}
	printf("parent:x=%d\n",--x);
	exit(0);
}

在Unix系统上运行这个程序时,得到的结果:
linux>./fork
parent:x=0
child:x=2
学习fork函数,画进程图通常会有所帮助,进程图是刻画程序语句的偏序的一种简单的前趋图。

             child:x=2
           ——>printf————>exit 子进程
         |
   x==1  |   parent:x=0
main——>fork——>printf————>exit 父进程

进程图特别有助于理解带有嵌套fork调用的程序。

3.回收子进程

一个进程可以通过调用waitpid函数来等待它的子进程终止或者停止。

pid_t waitpid(pid_t pid,int *statusp,int options);

1.判定等待集合的成员

  • 如果pid>0,那么等待集合就是一个单独的子进程,它的进程ID等于pid.
  • 如果pid=-1,那么等待集合就是由父进程所以子进程组成的。

2.修改默认行为
options

  • WNOHANG:如果等待集合中的任何子进程都还没有终止,那么就立刻返回(返回值为0)。
  • WUNTRACED:挂起调用进程的执行,直到等待集合中一个进程变成已终止或者被终止。
  • WCONTINUEN:挂起调用进程的执行,直到等待集合中一个正在运行的进程终止或等待集合中一个被停止的进程收到SIGCONT信号重新开始执行。

3.检查已回收子进程的退出状态
statusp

  • WIFEXITED:如果子进程通过调用exit或者一个返回正常终止,就返回真。

4.wait函数
调用wait(&status)等价于调用waitpid(-1,&status,0)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值