终止孩子后父进程的输出是什么?

时间:2014-12-03 11:24:41

标签: c

 #include<stdio.h>
 #include<stdlib.h>
    #include<unistd.h>
 main()
 {
    printf("Parent pid=%d\n",getpid());
    int a=2,b;
    pid_t pid;
    pid=vfork();
    if(pid!=0)
            sleep(5);
    a=a+2;

    printf("%d\t%d\n",getpid(),a);
                    if(getpid()==0)                                                                                         
            exit(0);
  }

当我打印时,它显示为

 Parent pid=10696
 10697  4
 10696  3
a.out: cxa_atexit.c:100: __new_exitfn: Assertion `l != ((void *)0)' failed.
Aborted (core dumped)

2 个答案:

答案 0 :(得分:2)

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
main()
{
        printf("Parent pid=%d\n",getpid());
        int a=2,b;
        pid_t pid;
        pid=vfork();
        if(pid!=0)
                sleep(5);
        a=a+2;
        printf("%d\t%d\n",getpid(),a);
        exit(0);
}

删除第if(getpid() == 0)行。

getpid()将返回执行进程的进程而不是0。

fork()vfork()中的返回值0与获取pid不同。

答案 1 :(得分:2)

 #include<stdio.h>
#include<stdlib.h>
 #include<unistd.h>
 main()
    {
    printf("Parent pid=%d\n",getpid());
    int a=2,b;
    pid_t pid;
    pid=vfork();
    if(pid!=0)
            sleep(5);
    a=a+2;
    printf("%d\t%d\n",getpid(),a);
  if(pid == 0)  
  exit(0);
}

如果条件

则更改