43 lines
925 B
C
43 lines
925 B
C
|
#include <stdio.h>
|
|||
|
#include <sys/types.h>
|
|||
|
#include <unistd.h>
|
|||
|
#include <sys/wait.h>
|
|||
|
#include <stdlib.h> // atexit
|
|||
|
#include <fcntl.h>
|
|||
|
|
|||
|
int main(int argc, char const *argv[])
|
|||
|
{
|
|||
|
pid_t pid = vfork();
|
|||
|
if (pid == 0)
|
|||
|
{
|
|||
|
for (int i = 0; i < 3; i++)
|
|||
|
{
|
|||
|
// vfork 子进程和父进程会共享内存
|
|||
|
pid = vfork();
|
|||
|
if (pid == 0)
|
|||
|
{
|
|||
|
// 子进程
|
|||
|
for (int i = 0; i < 5; i++)
|
|||
|
{
|
|||
|
printf("%d vfork的子进程 i=%d\n", getpid(), i);
|
|||
|
|
|||
|
sleep(1);
|
|||
|
}
|
|||
|
_exit(0); // 回收资源退出; vfork创建的子进程结束后,才会执行父进程
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
else if (pid > 0)
|
|||
|
{
|
|||
|
// 父进程
|
|||
|
while (1)
|
|||
|
{
|
|||
|
printf("%d 父进程 \n", getpid());
|
|||
|
sleep(1);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return 0;
|
|||
|
}
|