在学习进程过程中我们都知道,父进程中调用os.fork(),然后由系统创建子进程。子进程继承了父进程的所有程序和内存空间。
父进程的PID返回值是子进程的PID号,而子进程的PID的返回值是0。按照这种说法,子进程在系统中的PID就为0。具体情况请看下面的程序:
import os
pid = os.fork()
if pid < 0:
print("Create process failed")
elif pid == 0:
#获取当前进程的PID
print("子进程的pid:",os.getpid())
#获取父进程的PID
print("从子进程中获取父进程的pid:",os.getppid())
else:
print("在父进程中获取子进程的pid:",pid)
print("获取父进程的pid:",os.getpid())
结果:
在父进程中获取子进程的pid: 5363
获取父进程的pid: 5362
子进程的pid: 5363
从子进程中获取父进程的pid: 5362
其中os.getpid是获取当前进程的pid,os.getppid是获取当前进程的父进程的pid.
问题:
如果子进程的pid返回值为0,那么子进程在系统中的pid为0。
但是事实并不是这样,从以上的示例中可以得知,父进程在系统的pid比子进程要大1。
分别为
父进程:5362
子进程:5363
表示在系统中的pid是原有的pid分别加上各自进程pid的返回值。