子进程退出发送CHLD 信号

1,200 阅读1分钟

子进程在退出的时候会向父进程发送CHLD命令, 告知自己退出了。

import os
import sys
import time
import signal


def handler(sig, frame):
    print(f'receive signal {sig}')


def main():
    # 子进程在退出的时候, 父进程会受到子进程发送的SIGCHLD信号
    signal.signal(signal.SIGCHLD, handler)
    pid = os.fork()
    if pid > 0:
        print('in parent process')
    elif pid == 0:
        print('in child process')
        sys.exit(0)
    else:
        print('error!')
    time.sleep(1)


if __name__ == '__main__':
    main()

输出

in parent process
in child process
receive signal 20

其中time.sleep(1)用来防止父进程过早退出无法接受子进程的退出信号。