在Linux环境下,创建一个新的进程,要用fork()函数
调用fork()成功后,会有一个新的进程,它是父进程的一个副本,并采用“写时拷贝”的思想使用各类资源。两个进程都从fork()函数中返回,所以会有两个返回值,它会给父进程返回子进程的pid,给子进程返回0。
有一个程序如下:
运行结果:
这里我们很容易能够分析出来,因为父子进程代码段共享,所以它们会打印出各自的pid;
如果把上述程序修改如下,结果会打印出几条语句呢?
运行结果:
一共打印了六条,这又如何分析呢?
因为两个进程代码和数据是相同的,所以两个进程中的i都是1;
每一个进程都会打印一个语句,所以一共是6条;
如果条件是i<3呢?结果应该是2+4+8;
到这里我们已经基本分析清楚了,但是我还有一个疑问,父子进程运行的先后顺序是如何决定呢?
答案是随机的,因为子进程被创建后,作为一个进程何时可以运行,是由操作系统中各种调度算法决定的。