nohup
命令本身不提供直接的超時功能,但你可以結合其他命令來實現這個需求。一個常用的方法是使用 timeout
命令與 nohup
結合。以下是如何使用它們的示例:
timeout [SECONDS] nohup your_command &
將 [SECONDS]
替換為你想要的超時時間(以秒為單位),將 your_command
替換為你想要執行的命令。
例如,如果你想要在 60 秒后超時并運行名為 my_script.sh
的腳本,你可以這樣做:
timeout 60 nohup ./my_script.sh &
這將在后臺運行 my_script.sh
,并在 60 秒后自動終止它。如果腳本在超時時間內完成,timeout
命令將正常退出,不會殺死你的腳本。如果腳本超時,timeout
將發送一個 SIGTERM 信號來終止腳本。
注意,這種方法的一個缺點是,如果腳本在超時后仍在運行,timeout
將發送 SIGKILL 信號強制終止腳本。這可能導致腳本無法正確清理資源。為了避免這種情況,你可以在腳本中定期檢查一個文件或進程的狀態,并在收到終止信號時執行清理操作。