subprocess.Popen()で実行したプロセスを、Pythonスクリプト内からCtrl+Cを送信して実行を中止させたい。
signal_send(SIGINT)を使うとCtrl+Cと同等のシグナルを送信できると聞いていたのだけど、どうも機能していない。
色々調べた結果、popenにshell=True属性をつけないとうまくkillできないということがこのサイトのおかげで分かった。
どうもシェルを殺しただけでコマンド自体が殺せてない、という状況になっていたらしい。
signal_send(SIGINT)が効かなくてネット役たたねぇ!って思ってたけど、そんなことなかった。僕が間違ってた。
PHPだってシェル経由でないコマンド呼び出し機能が欲しい コマンド実行でシェルが怖いなら使わなければいいじゃない どちらの記事でも Python の subprocess を使ってシェルを介在せずにコマンドを実行する方法が紹介されています。 シェルを介在すると、エスケープの問題考えるのが面倒だったり、 kill してみたらシェルだけ殺して肝心のコマンドがずっと残ってるというアホみたいな問題を避けられるのでお勧めです。 いい子はこれを使いましょう。 この記事ではどうしてもシェルの機能が使いたい場合や、 subprocess の PIPE の組み... Python でシェル経由でコマンド実行するときのバッドノウハウ - methaneのブログ - methaneのブログ |
追記(2017/08/20):
やっぱ効かねぇじゃねえか!!
ネット役たたねぇ!