#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)
答案 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);
}
如果条件
则更改