fork函数
一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。
一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。相当于克隆了一个自己,但是是独立的进程。
————————————————
fork,英文名分叉,顾名思义,以下举一个简单的例子。
来源:关于fork函数的使用
void fork3()
{
printf("L0\n");
fork();
printf("L1\n");
fork();
printf("L2\n");
fork();
printf("Bye\n");
}
实际应用中, 单纯让程序分叉意义不大, 我们新增一个子进程, 一般是为了让子进程单独执行一段代码. 实现与主进程不同的功能。
根据fork函数返回的参数判断,如果返回0则说明是子进程,而在主进程中fork函数会返回主进程的pid(大于0),就可以根据if语句来执行不同的代码。
子进程退出
需要注意的是, 假如没有做特殊处理, 子进程会一直存在, 即fork()函数被调用完成, 子进程会和主程序一样,返回调用fork() 函数的上一级函数继续执行, 直到整个程序退出。
1、不使用exit(0),即不退出;
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main()
{
if (fork()==0)