提问者:小点点

Linux短简单的命令如何将SIGTERM发送到一个进程,如果它在X秒内不存在,SIGKILL?


如何看待Linux命令发送终止信号到进程/PID,如果它不能在10秒后优雅地退出杀死它?

我的尝试是:“sudo timeout-vk 5 10 kill PIDhere”(-v verbose,-k X秒后kill),但我不确定它是否好,或者如何调整值,或者是否有更好的命令,甚至可以处理流程命令行中显示的部分名称。(“ps辅助”输出)


共1个答案

匿名用户

sudo timeout -vk 5 10 kill PIDhere

将执行< code>kill,如果花费时间太长,将尝试终止该进程。这是不应该发生的,也可能不是您想要的(如果< code>kill实际上是挂起的,杀死它不会影响您的实际进程)。< code>timeout用于限制进程运行的时间,而不是在收到信号后终止的时间。

相反,我建议异步启动该过程(例如,使用

$ some_process &
# time passes, eventually we decide to terminate the process
$ kill %1
$ sleep 5s
$ kill -s SIGKILL %1 # will fail and do nothing if %1 has already finished

或者,您可以依赖等待,如果作业在睡眠完成之前终止,它将提前返回:

$ some_process &
# time passes
$ kill %1
$ sleep 5s &
$ wait -n %1 %2       # returns once %1 or %2 (sleep) complete
$ kill -s SIGKILL %1  # if %2 completes first %1 is still running and will be killed

您可以使用PID而不是作业ID来执行上述操作,因为您需要担心PID的重用,所以操作起来有点繁琐。

如果有更好的命令,甚至可以使用名称的一部分

pkill做了你想做的事吗?