0

プロセスを実行し、数時間待ってから強制終了し、もう一度開始する必要があります。Python または Bash でこれを実現できる簡単な方法はありますか? バックグラウンドで実行できますが、kill を使用するにはどうすれば識別できますか?

4

7 に答える 7

3

bashを使用する場合:

while true ; do
    run_proc &
    PID=$!
    sleep 3600
    kill $PID
    sleep 30
done

bash変数は、$!最後に開始されたバックグラウンドプロセスのPIDに展開されます。1sleep時間待つだけで、killそのプロセスがシャットダウンされます。

ループはwhileそれを何度も繰り返し続けます。

于 2009-04-01T06:16:21.427 に答える
2

パイソンでは:

import subprocess
import time

while True:    
    p = subprocess.Popen(['/path/to/program', 'param1', 'param2'])
    time.sleep(2 * 60 * 60) # wait time in seconds - 2 hours
    p.kill()

p.kill()Python >= 2.6 です。

Python <= 2.5 では、代わりにこれを使用できます。

os.kill(p.pid, signal.SIGTERM)
于 2009-04-01T10:12:16.803 に答える
0

理想的な方法ではありませんが、プログラムの名前を知っていて、それがシステムで実行されているその名前の唯一のプロセスであることがわかっている場合は、これを cron で使用できます。

0 */2 * * * kill `ps -ax | grep programName | grep -v grep | awk '{ print $1 }'` && ./scriptToStartProcess

これは正時に 2 時間ごとに実行され、programName を強制終了してからプロセスを再開します。

于 2009-04-03T13:26:36.877 に答える
0

1つのアイデア:プロセスのPID(fork()子プロセスで返される)をファイルに保存し、ジョブをスケジュールしcronて強制終了するか、ファイルからPIDを読み取って手動で強制終了します。

別のオプション: プロセスを自動的に強制終了して再起動するシェル スクリプト ラッパーを作成します。上記と同じですが、PID をメモリに保持し、必要なだけスリープし、プロセスを強制終了してからループすることができます。

于 2009-04-01T05:52:05.993 に答える