python os.fork子进程ID不连续

时间:2019-01-03 01:03:04

标签: python

我正在尝试使用CPython 3.7.2进行os.fork函数 这是示例

def main():
    data = 222

    childPid = os.fork()
    if childPid == -1:
        print('error on fork child')
    elif childPid == 0:
        data *= 3
    else:
        time.sleep(3)

    print("PID=%d data=%d" % (os.getpid(), data))

当我使用C语言时,我总是为父母和孩子获得2个连续的PID。 但是在python中,我总是得到不连续的PID(例如,在这里我得到了2147521442)。

PID=21475 data=666
PID=21442 data=222

不明白它的行为方式是否相同。

1 个答案:

答案 0 :(得分:5)

尽管pID通常是连续的(在Linux上),但不保证PID是连续的。如果PID已被使用,它将被跳过。

如果在测试C代码时看到连续的PID,那是因为您碰巧没有遇到正在使用的PID。 C语言的fork()和Python语言的os.fork()之间的行为应该没有区别。