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;
|
||
}
|