Bash

在一定時間後從命令行停止/終止程序

  • June 28, 2019

我有一個 Python 程式碼可以監聽和檢測環境聲音。這不是我的項目,我是在網路上找到的(SoPaRe)。使用該./sopare.py -l命令,它開始錄製聲音,但處於無限循環中。當我想停止它時,我必須按Ctrl+C

我的目的是在 10 秒後自動停止這個程序,但是當我與作者交談時,他說該程序沒有時間限制。

我試圖通過 殺死它kill PID,但PID每次程序執行時都會改變。如何在一段時間後通過 停止它bash

或者,我可以使用命令從 python 執行此os.system()命令。

最簡單的解決方案是使用timeoutGNU coreutils 集合(可能預設安裝在大多數 Linux 系統上):

timeout 10 ./sopare.py -l

有關更多選項,請參閱此實用程序的手冊 ( man timeout)。在非 GNU 系統上,可以像安裝gtimeoutGNU coreutils 一樣安裝此實用程序。

如果 GNU coreutils 不可用,另一種選擇是在後台啟動程序並等待 10 秒,然後再發送終止信號:

./sopare.py -l &
sleep 10
kill "$!"

$!將是最近啟動的後台程序的程序 ID,在這種情況下是您的 Python 腳本。

如果等待時間用於其他事情:

./sopare.py -l & pid=$!
# whatever code here, as long as it doesn't change the pid variable
kill "$pid"

引用自:https://unix.stackexchange.com/questions/483879