私はいくつかのジョブを待って(subprocess.Popen
とshell=True
を使って)スレッドで実行するPythonスクリプトを持っています。私がシェルでスクリプトを実行し、それをCtrl-C
で終了しようとすると、それは正常にそしてきれいに閉じます。Ctrl + CをPythonスクリプトにシミュレート
問題は、このスクリプトをデーモンとして実行し、ある種のUNIXシグナルを使用して終了することです。 INT
シグナルはCtrl-C
と同じにする必要がありますが、同じ方法では機能しません。子プロセスはsubproces.popen
のままです。
シグナルを受信したときにメインスレッドでKeyboardInterupt
を起こうとしましたが、スクリプトを閉じてすべての子プロセスを終了することもできませんでした。
アドバイスどのようにエミュレートするのですかCtrl-C
? subprocess.popen
への呼び出しの
例:
shell_cmd = "bwa aln -t 8 file1.fasta file1.fastq.gz > file1.sam.sai"
process = subprocess.Popen(shell_cmd,
shell=True,
stderr=subprocess.PIPE)
INT信号をどのように送信しましたか? 'kill -s SIGINT pid'はシェルからですか? –
はい、それが信号を送信した方法です。結果はCtrl-Cを使用した場合とは異なりました – Rok