if(pid <0){...} //pid<0,表示fork出错,程序一般会退出,不会出现pid=0和pid>0的情况
else if(0 == pid){...} //从这个点开始,程序出现分支 pid=0表示fork出来的子进程分支
else{....} //否则是原进程,即父进程
printf("here!")//如果在上面两个进程都没有exit() *** 作时,执行完{}中的命令,都会走到这里
关于fork出来的父子进程关系,请仔细阅读linux高级编程中进程一章节,内容很多,细细的阅读并练习体会吧
/*请解释一下*/while(((child=wait(&status))==-1)&(errno==EINTR))
这种的目的是父亲进程等待子进程结束,并回收子进程的资源,将子进程的退出状态存储在status中,同时,返回该子进程的pid。
如果wait函数返回-1表示wait函数被其它情况打断返回,并没有等待到子进程结束,而同时判断errno的值是不是EINTR(意思是让你try again),那么,让进程继续等待。因为这个错误并不是真正wait错误,而是被timeout时间等造成的,因此重新等待。而如果是其它情况,显然是wait函数调用错误,即下面的if(child==-1),需要打印错误信息。‘
//但你这句应该写错了。应该是逻辑与而不是位与 *** 作。即
while(((child=wait(&status))==-1)&&(errno==EINTR))
/*请解释一下*/
if(child==-1)
你对信号处理部分还需要努力。
另外介绍一本书《Linux高级程序设计 第3版》 上面讲得很清楚。
有问题我们继续交流,一起学习。
更多技术文章可以关注我的微博,名字:成都睿尔科技 。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)