【问题标题】:`trap`-ing Linux Signals - SIGSTOP?`trap`-ing Linux 信号 - SIGSTOP?
【发布时间】:2016-05-11 22:56:28
【问题描述】:

Docker docs 请注意以下(带代码)如何在容器关闭时运行 clean up

最后,如果您需要在关机时进行一些额外的清理... 可能需要确保ENTRYPOINT 脚本接收到 Unix 信号,传递它们,然后做更多的工作

#!/bin/sh

trap "echo TRAPed signal" HUP INT QUIT KILL TERM

/usr/sbin/apachectl start

我认为这个trap 会捕获KILL 信号。但是,我读到了这个post

进程可以拦截除SIGKILL和SIGSTOP之外的所有信号。

但是,另一个post 表示:

您无法捕获一个信号:SIGKILL 或信号 9。

这是什么?

【问题讨论】:

    标签: linux signals


    【解决方案1】:

    你无法捕捉到 SIGSTOP。您引用的页面有误。

    是的,上面的脚本试图捕捉 KILL 信号。它失败。您可以使用以下脚本非常轻松地自己验证这一点:

    #!/bin/sh
    
    echo "Running shell in pid $$"
    trap "echo TRAPed signal" HUP INT QUIT KILL TERM STOP
    
    sleep 20
    

    尝试向它发送 KILL 和 STOP 信号,您将看到进程分别终止和停止,而没有打印消息。如果您尝试任何其他捕获的信号,您将看到这些信号按预期处理。

    【讨论】:

    • 感谢您的回答。作为补充参考,wikipedia 注释:There are two signals which cannot be intercepted and handled: SIGKILL and SIGSTOP.
    • @KevinMeredith,如果您认为这回答了您的问题,请点击答案旁边的 V 接受它。
    猜你喜欢
    • 2022-06-15
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多