私はPythonコードで環境音を聞いて検出します。これは私のプロジェクトではありません。Web(SoPaRe)で見つけました。_./sopare.py -l
_コマンドを使用すると、音の録音を開始しますが、無限ループです。停止したいときは、 Ctrl+C。
私の目的はこのプログラムを10秒後に自動的に停止することですが、作者と話をしたところ、プログラムには時間制限がないと彼は言いました。
_kill PID
_を使用して強制終了しようとしましたが、プログラムが実行されるたびにPID
が変化します。 bash
を介して一定の間隔で停止するにはどうすればよいですか?
または、このコマンドをpython with os.system()
コマンドから実行することもできます。
最も簡単な解決策は、GNU coreutilsのコレクションからtimeout
を使用することです(おそらく、ほとんどのLinuxシステムにデフォルトでインストールされています)。
timeout 10 ./sopare.py -l
その他のオプションについては、このユーティリティのマニュアルを参照してください(man timeout
)。非GNUシステムでは、GNU coreutilsがインストールされている場合、このユーティリティはgtimeout
としてインストールされます。
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"
このbashスクリプトを試してください:
#! /bin/bash
./soapre.py -l
PID=`ps u | awk ' $11 == "./soapre.py" { print $2 }'`
sleep 10
kill $PID
sleep 10
がバックグラウンドで実行されている間、soapre.py
コマンドはbashスクリプトのみを一時停止すると仮定しています。また、ps u
列のCOMMAND
の値が"./soapre/py"
と異なる場合もあります。独自の簡単な修正を行いますが、これは機能すると想定されています。