永发信息网

linux中C语言关于进程的创建

答案:4  悬赏:80  手机版
解决时间 2021-02-02 18:21
  • 提问者网友:暗中人
  • 2021-02-02 14:16
linux中C语言关于进程的创建
最佳答案
  • 五星知识达人网友:动情书生
  • 2021-02-02 15:15
1、fork 是用来创建子进程的, 而不是线程( 线程创建需要用到 pthread_create )。
需要根据 fork() 的返回值来判断下面的代码是在父进程(返回pid>0)中还是子进程(返回0)中. 像上面的代码中 if 中的代码被在子进程中执行, else 中的代码在父进程中执行。
2、例程:
#include 
#include 
#include 
int main()
{
pid_t id;    //定义一个进程号变量
int i=0;
printf("start fork/n");
id = fork();    //调用fork函数新建一个进程
i ++;
printf("end fork/n");
//判断当前进程
if(id < 0){    //出错
perror("fork failed/n");
exit(1);
}
else if(id == 0){    //子进程
printf("In child/n");
printf("i = %d/n", i++);
exit(0);
}
else{    //父进程
printf("In father/n");
printf("i = %d/n", i++);
exit(0);
}
return 0;
}
全部回答
  • 1楼网友:酒者煙囻
  • 2021-02-02 18:41
父进程调用完子进程后,调用wait阻塞自己 ,等待子进程执行完毕再执行之后的操作。
  • 2楼网友:纵马山川剑自提
  • 2021-02-02 17:43
这根信号有关系。父进程调用wait会阻塞 自己,直到子进程退出。
例外是父进程阻塞过程中收到信号,比如收到一个CTRL-C组合键, 或是收到一个Kill信号等,这时父进程退出阻塞,去执行自己的信号处理程序。执行之后如果程序没有退出,就会到达这里的while语句。wait返回-1, errno=EINTR. 因为等待的条件没发生, 所以遇到这个条件, 程序重新执行wait.
  • 3楼网友:人间朝暮
  • 2021-02-02 16:06

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版》 上面讲得很清楚。
有问题我们继续交流,一起学习。
更多技术文章可以关注我的微博,名字:成都睿尔科技 。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯