使用适当的POSIX信号
我目前正在研究一个具有守护进程的项目,该守护进程查看任务队列,运行这些任务,然后收集有关这些任务的信息。 在某些情况下,如果守护程序运行时间过长,它必须“杀死”一个任务。
SIGTERM的解释是“终止信号”,但这不是很有用的信息。 我想为此使用最合适的信号。
什么是用于告诉流程的最适合的POSIX信号编号?“您花费了太多时间运行,因此您需要立即停止”?
如果你控制着孩子的过程,你几乎可以SIGTERM
,但是SIGTERM
就是这种自我记录的信号。 它要求一个过程终止,礼貌地:过程选择如何处理信号,并可能在实际退出之前执行清除操作(或可能忽略该信号)。
杀死进程的标准方法是首先发送一个SIGTERM
; 然后等待它以例如5秒的宽限期终止(如果终止可能需要很长时间(例如,由于大量的磁盘I / O),则更长)。 如果宽限期已过,请发送SIGKILL
。 这是SIGTERM
的“硬”版本,不容忽视,但也使得整个过程没有机会整齐地进行清理。 发送一个SIGKILL
应该被认为是子进程的一个问题,并且被报告为这样。
通常你会首先发送SIGTERM
到一个进程。 当进程收到这个信号时,它可以清理一些事情然后自行终止:
kill -15 PID_OF_PROCESS # 15 means SIGTERM
您可以通过向它的PID发送0
信号来检查进程是否仍在运行。
kill -0 PID_OF_PROCESS # 0 means 0 :)
if [ "$?" == "0" ] ; then
echo "the process is still running"
fi
但是,您需要一些宽限期来清理流程。 如果进程在宽限期后没有自行终止,则使用SIGKILL
终止进程,此进程无法处理此信号,操作系统将立即终止进程。
kill -9 PID_OF_PROCESS # 9 means SIGKILL, means DIE!
链接地址: http://www.djcxy.com/p/50023.html
上一篇: Using appropriate POSIX signals
下一篇: How are asynchronous signal handlers executed on Linux?