在Python中,可以使用signal
模块来捕获子进程中接收到的UNIX信号。下面是一个示例代码:
import os
import signal
import subprocess
def signal_handler(signum, frame):
print(f"Received signal: {signum}")
def run_child_process():
# 子进程中注册信号处理函数
signal.signal(signal.SIGUSR1, signal_handler)
# 子进程执行的代码
print(f"Child process ID: {os.getpid()}")
while True:
pass
if __name__ == "__main__":
# 创建子进程
child_process = subprocess.Popen(["python", "-c", "run_child_process()"])
# 父进程发送信号给子进程
os.kill(child_process.pid, signal.SIGUSR1)
在上面的代码中,我们首先定义了一个信号处理函数signal_handler
,用于处理接收到的信号。然后,在子进程中使用signal.signal()
函数注册了一个信号处理函数,这里我们注册了SIGUSR1
信号。接着,子进程执行了一个无限循环,用于模拟子进程的运行。在父进程中,我们使用os.kill()
函数向子进程发送了一个SIGUSR1
信号。
当子进程接收到信号后,会调用注册的信号处理函数signal_handler
,并打印出接收到的信号编号。
需要注意的是,子进程中注册的信号处理函数只会在子进程中生效,父进程无法捕获子进程的信号。
关于Python中的信号处理,可以参考官方文档:signal — Set handlers for asynchronous events。
腾讯云相关产品和产品介绍链接地址:
领取专属 10元无门槛券
手把手带您无忧上云