本文基于python实现
UNIX/LINUX/MAC中提供了fork()系统调用,但是Windows下却没有。
fork()函数会创建一个新的进程,称为子进程。当前进程为父进程。子进程有父进程(当前进程复制而来)。fork的子进程会复制当前进程的全部代码空间,资源,和数据结构。所以,fork的子进程从哪开始运行? 从创建子进程这一行开始运行。同时,fork会返回两次,一次父进程返回,为子进程的ID,一次子进程返回,就返0。
下面举个例子。
import os
print('Process (%s) start ...' % os.getpid())
pid = os.fork()
if pid == 0:
print('I am child process (%s)' % os.getpid())
print('my parent process is (%s)' % os.getppid())
else:
print('I (%s) just created a child process (%s).' % (os.getpid(), pid))
结果如下:
Q&A:
- getpid()返回当前进程id getppid()返回父进程id
- pid的值到底是多少?
fork可能的值有3种,一种是子进程的id=0,一种是父进程的id,还有一种是fork出错,返回负值。 - 什么情况下fork出错?
内存不足 或 当前进程数达到上限 - 父进程子进程执行顺序?
没有固定的执行顺序,要看操作系统的进程调度方案。
5.子进程从哪开始执行?
因为子进程复制了父进程几乎全部内容,所以fork前的代码不再执行,从fork后开始执行。