此代码的结果是什么?为什么会这样?

问题描述

产生代码结果的原因是什么? 当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

解决方法

这是执行的时间顺序:

第二个:

  1. fork()已发布
  2. 父进程打印其pid(63742)
  3. 子进程打印其pid(63825)
  4. 两个进程都进入睡眠状态

第二个:

  • 两个进程都在休眠

第二个:

  1. 父进程唤醒。子进程将再睡眠2秒钟
  2. 父进程发出除以0的整数导致异常和程序异常终止

为了深入研究在父进程终止于子进程之前发生什么情况,我建议检查this questionthis other one