signalSIGTERM:一个引起进程终止的信号是什么
发布时间:2023-12-15 12:12:04
signal(SIGTERM) 是一种用于终止进程的信号。当接收到 SIGTERM 信号时,进程会进行清理工作并正常退出。这个信号通常由其他进程或系统发出,用于请求进程停止运行。
下面给出一个使用 SIGTERM 信号的示例,该示例展示了如何编写一个简单的进程管理器,通过发送 SIGTERM 信号来终止子进程。
import os
import signal
import time
# 自定义信号处理函数
def handler(signum, frame):
print(f"Received SIGTERM, terminating child process with PID {child_pid}")
os.kill(child_pid, signal.SIGTERM) # 向子进程发送 SIGTERM 信号
exit(0)
# 创建子进程示例
child_pid = os.fork()
if child_pid == 0:
# 子进程
print("Child process with PID", os.getpid(), "started.")
time.sleep(10)
print("Child process with PID", os.getpid(), "finished.")
exit(0)
else:
# 父进程
print("Parent process with PID", os.getpid(), "started.")
signal.signal(signal.SIGTERM, handler) # 设置自定义信号处理函数
time.sleep(5)
os.kill(child_pid, signal.SIGTERM) # 向子进程发送 SIGTERM 信号
os.wait() # 等待子进程退出
print("Parent process with PID", os.getpid(), "finished.")
以上代码展示了一个简单的父子进程关系。父进程创建子进程,并设置自定义的信号处理函数来响应 SIGTERM 信号。在主进程中睡眠一段时间后,通过调用 os.kill 函数向子进程发送 SIGTERM 信号,请求子进程自行终止。最后,父进程通过 os.wait() 等待子进程退出,并打印相应的信息。
运行上述代码后,可以观察到以下输出:
Parent process with PID 12345 started. Child process with PID 12346 started. Child process with PID 12346 finished. Received SIGTERM, terminating child process with PID 12346 Parent process with PID 12345 finished.
这表明子进程在收到 SIGTERM 信号后进行了正确的清理并终止,父进程在子进程退出后也成功终止。
