环境:Vmware Workstation;CentOS-6.4-x86_64
说明:
1、根据父子进程中,fork返回值的结果不同,那么可以明确区分执行代码属于父进程还是子进程。
2、if的判断条件是fork的返回值是否大于0。
3、在父进程特有代码中修改内容,不会影响子进程的执行;在子进程特有代码中修改内容,不会影响父进程的执行。
4、在if...else...之外修改,会改变父进程和子进程的执行。
5、父进程和子进程的执行完全是不相干的,互不影响,因为它们是两个不同的进程,因此,父进程和子进程的执行是异步的。
代码实现:
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
int main(int argc, char *args[])
{
// 执行fork函数
pid_t id = fork();
// 判断fork是否执行成功
if (id == -1)
{
printf("Message : %s\n", strerror(errno));
}
// 定义一个变量
int num = 10;
// 修改变量的值
// 在这里修改是在if...else...外部修改,会影响父子进程的执行
num = 100;
// 判断条件是fork的返回值是否大于0
if (id > 0)
{
printf("before father num = %d\n", num);
// 在父进程特有的代码中修改变量的值,只会影响父进程的执行
num = -1;
printf("after father num = %d\n", num);
}
else
{
printf("before son num = %d\n", num);
// 在子进程特有的代码中修改变量的值,只会影响子进程的执行
num = -3;
printf("after son num = %d\n", num);
}
return 0;
}
编译并执行程序:
[negivup@negivup mycode]$ gcc -o main main.c
[negivup@negivup mycode]$ main
before father num = 100
after father num = -1
[negivup@negivup mycode]$ before son num = 100
after son num = -3
PS:根据传智播客视频学习整理得出。