首页 文章

使用适当的POSIX信号

提问于
浏览
0

我目前正在开发一个项目,该项目具有守护进程,该进程查看任务队列,运行这些任务,然后收集有关这些任务的信息 . 在某些情况下,守护程序必须“杀死”任务,如果它运行时间太长 .

SIGTERM的解释是“终止信号”,但这并不是很有用 . 我想为此使用最合适的信号 .

什么是最合适的POSIX信号编号,用于告诉进程“你花了太多时间运行所以你现在需要停止”?

2 回答

  • 2

    如果你掌控了孩子的过程,你可以随心所欲地做,但 SIGTERM 是这个的自我记录信号 . 它要求进程有礼貌地终止:进程选择如何处理信号并且可以在实际退出之前执行清理操作(或者可以忽略信号) .

    然后,杀死进程的标准方法是先发送 SIGTERM ;然后等待它以5秒的宽限期终止(如果终止可能需要很长时间,例如因为大量的磁盘I / O,则更长) . 如果宽限期已过期,请发送 SIGKILL . 这是 SIGTERM 的"hard"版本并且不容忽视,但也让整个过程无法整齐地清理 . 必须将发送 SIGKILL 视为子进程的问题并进行报告 .

  • 1

    通常你会先将 SIGTERM 发送给一个进程 . 当这个过程重现这个信号时,它能够清理一些东西,然后自行终止:

    kill -15 PID_OF_PROCESS # 15 means SIGTERM
    

    您可以通过将 0 信号发送到它的pid来检查进程是否仍在运行 .

    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!
    

相关问题