赞
踩
实验结论:
1 fork前的代码,只由父进程执行一次
2 fork后子进程中的代码{},只由子进程执行
fork后父进程的代码{},只由父进程执行
3 fork后的代码,因子子进程复制了父进程的代码段,所以父子进程各执行一次
特别地:
1 如果将execlp(任意exec*函数族)开启并成功执行,代码段将立即从此处立即被替换
也就是说after fork语句和后面的子进程代码都不会执行
2 如果将exit在子进程中开启,代码段将立即从此处截断并返回父进程
也就是说after fork语句和exit后的子进程代码都不会执行
- #define _GNU_SOURCE
- #include <stdio.h>
- #include <unistd.h>
- #include <sys/wait.h>
- #include <string.h>
-
- int main()
- {
- // fork前的代码,只由父进程执行一次
- printf("%d:Before fork\n", getpid());
- pid_t pid = fork();
- if (pid == 0)
- {
- // fork后子进程中的代码{},只由子进程执行
- printf("%d:Child process\n", getpid());
- // 如果将execlp(任意exec*函数族)开启并成功执行代码段将立即从此处立即被替换
- // 也就是说after fork和后面的子进程代码都不会执行
- // execlp("ls", "ls", "-l", NULL);
-
- // 如果将exit开启代码段将立即从此处截断
- // 也就是说after fork和exit后的子进程代码都不会执行
- // exit(EXIT_SUCCESS);
- }
- else if (pid > 0)
- {
- // 父进程等待子进程结束,严谨
- wait(NULL);
- // fork后父进程的代码{},只由父进程执行
- printf("%d:Parent process\n", getpid());
- }
- else
- {
- // 出错
- perror("fork");
- }
- // fork后的代码,因子子进程复制了父进程的代码段,所以父子进程各执行一次
- printf("%d:After fork\n", getpid());
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。