好有意思的一段代码 共享
#include "stdio.h"
#include "sys/types.h"
#include "unistd.h"
int main()
{
int i = 0;
printf("before fork\n");
pid_t pid = fork();
printf("after fork\n");
if (pid < 0){
printf("error\n");
return 1;
}
else if (pid == 0){
printf("fork success,this is son process\n");
while (i<15){
i += 1;
printf("this is son process,i=%d\n",i);
sleep(1);
}
}
else{
printf("fork success,this is father process,son process id is %d \n",pid);
while (i<10){
i += 2;
printf("this is father process,i=%d\n",i);
sleep(2);
}
}
return 0;
}
输出如下:

几点如下:
(1)fork 是“复制”一份主程序,即创建主进程的子进程。负值:创建子进程失败。
零:返回到新创建的子进程。
正值:返回父进程或调用者。该值包含新创建的子进程的进程ID。
(2)创建新的子进程后,两个进程将执行fork()系统调用之后的下一条指令。子进程使用相同的pc(程序计数器),相同的CPU寄存器,在父进程中使用的相同打开文件。
(3)两进程独立运行,同时执行,相互不影响
(4)主进程执行完后不会杀死子进程
参考文章:
https://blog.youkuaiyun.com/yidu_fanchen/article/details/80494041
本文通过一段代码展示了C语言中fork()函数的工作原理。当调用fork()后,主程序被复制成子进程,两个进程独立执行,分别进行不同的操作。子进程会继承父进程的大部分状态,但拥有自己的进程ID。代码演示了父子进程如何并发执行并打印不同输出。
4844

被折叠的 条评论
为什么被折叠?



