我有两个一个衬垫:
在第一.我预计sh -c "..."在5秒后杀死命令但它一直存在直到超时退出(持续10秒)
timeout -k 5s 10s sh -c 'sleep 20s && echo "Long running command which is visible under: ps -elf | grep sleep during whole life (10s) time of timeout command"'
Run Code Online (Sandbox Code Playgroud)
第二.我预计超时将以返回代码124退出(因为sh -c "..."命令仍在运行),而命令sh -c "..."将继续运行(因为没有设置超时的kill选项)
timeout 10s sh -c 'sleep 20s && echo "Long running command which is visible under: ps -elf | grep sleep during whole life (10s) time of timeout command"'
Run Code Online (Sandbox Code Playgroud)
似乎传递给超时的参数运行准确的时间作为超时命令本身(它没有被提前杀死也没有超时),那么kill选项的目的是什么呢?
P.P*_*.P. 12
如果在超时后无法终止进程,则选项-k是KILL在指定的秒后发送信号.
timeout首先发送TERM信号.如果-k指定,则它还将发送KILL信号,遵循实际超时值.
例如
timeout -k 5 10 someCommand
Run Code Online (Sandbox Code Playgroud)
timeoutTERM10秒后发送信号.如果someCommand没有响应TERM(例如它可以阻止TERM信号),则在 5秒后timeout发送KILL信号(即自执行开始以来的第15秒).信号无法阻止.KILL