问题描述
产生代码结果的原因是什么?
当fork()
中发生异常时会发生什么?
#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>
int main(){
int pid=fork();
if(pid==0){
int child=getpid();
printf("child: parent %d\n",getppid());
sleep(4);
printf("child: parent %d\n",getppid());
sleep(100);
}
else{
int parent=getpid();
printf("parent: parent %d\n",getppid());
sleep(2);
int zero=0;
int i=3/zero;
}
return 0;
}
这是输出:
parent: parent 63742
child: parent 63825
Floating point exception (core dumped)
ubunto@ubuntu:~/Desktop$ child: parent 4497
解决方法
这是执行的时间顺序:
第二个:
-
fork()
已发布 - 父进程打印其pid(63742)
- 子进程打印其pid(63825)
- 两个进程都进入睡眠状态
第二个:
- 两个进程都在休眠
第二个:
- 父进程唤醒。子进程将再睡眠2秒钟
- 父进程发出除以0的整数导致异常和程序异常终止
为了深入研究在父进程终止于子进程之前发生什么情况,我建议检查this question和this other one。