#include <unistd.h>
#include <stdio.h>
static void f1(void);
static void f2(void);
int main(void)
{
printf("process id:%d\n", getpid());
f1();
f2();
_exit(0);
}
static void f1(void)
{
pid_t pid;
if((pid = vfork()) < 0)
{
printf("vfork error\n");
}
}
static void f2(void)
{
char buf[1000];
int i;
for(i = 0; i < sizeof(buf); i++)
{
buf[i] = 0;
}
printf("f2:process id:%d\n", getpid());
}
Выход выше программы:Почему vfork производит этот выход?
process id:9956
f2:process id:9957
Vfork
обеспечивает дочерний процесс выполнить перед тем родителем, поэтому я думаю, что при возвращении из функции f1()
, дочерний процесс будет выполняться f2()
, затем _exit(0)
; После этого почему родительский процесс не выполняет функцию f2()
?
Я могу найти только 'fork()' в вашем примере –
@skwllsp извините, я пропустил набирать vfork .. – Charles0429