如何看待Linux命令发送终止信号到进程/PID,如果它不能在10秒后优雅地退出杀死它?
我的尝试是:“sudo timeout-vk 5 10 kill PIDhere”(-v verbose,-k X秒后kill),但我不确定它是否好,或者如何调整值,或者是否有更好的命令,甚至可以处理流程命令行中显示的部分名称。(“ps辅助”输出)
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
做了你想做的事吗?