在 Linux 中使用 timeout 命令為正在運行的命令設置計時器
使用 timeout 命令,可以為運行的程序或命令設置超時時間,當程序或命令運行的時間超過設置值時,就會被 timeout 強行終止。
今天我們分享一下如何使用 timeout 命令。
如何使用 timeout 命令
timeout 命令的使用語法如下所示:
在上述語法描述中,時間的單位為秒(second)。
我們以 sleep 命令為例。sleep 命令會讓系統休眠指定的時間,比如 sleep 10,系統會休眠 10 秒鐘(即當前 shell 會等待 10 秒鐘)。但是如果我使用了 timeout 命令,如下所示:
上述命令中,sleep 命令指定的 10 秒鐘,即原計劃讓 shell 等待 10 秒鐘,但是前面添加了 timeout 命令,設置超時時間為 4 秒鐘,所以最終結果是在 4 秒鐘后 sleep 命令被終止,shell 被重新喚醒。
默認情況下,timeout 命令會發送 SIGTERM 信號柔和的終止正在運行的程序。但是我們可以使用 -s 選項來使用其他信號。
大家可以使用 kill -l 命令來查看 Linux 中的 kill 信號。假如我們想要發送 SIGKILL 信號(kill -9),而不是默認的 SIGTERM,可參考如下命令:
此外,我們也可以使用 KILL 或 9(kill -l 中列出的 SIGKILL 的數字)來代替 SIGKILL。
強制殺掉進程有可能會造成數據丟失,不過程序確實可以忽略 SIGTERM。
另外一種更好的處理方式是,假如你發送的終止請求被正在運行的(想要終止的)程序給忽略了,那么這時候可以發送強制終止信號。
我們來看這樣一個例子:假設我們想運行一個時間不超過 5 秒的程序,但是當程序運行以后(因某種原因)無法終止,那么我們可以在發送默認的 SIGTERM 信號 3 秒鐘后再發送一個強制終止的信號。如下命令所示:
這也就意味著,我們所運行的那個程序,運行時間不會超過 8 秒鐘。可以使用 time 命令來檢查程序實際的運行時間。
那么,timeout 命令的實際應用場景是什么呢?
timeout 命令看起來跟其他一些不怎么常用的命令一樣,使用的時候比較少。然而,在某些特殊情況下,它還是很有用的。
比如在進行網絡操作的時候可以使用 timeout 來設置超時時間,或者當你在玩一個終端游戲的時候,為了防止沉迷于游戲(玩的時間過長),也可以使用 timeout 命令來讓游戲程序在某個時間后強行終止運行。