#python IRC-Channel(Freenode)の誰かが、subprocess.Popen(...)のpreexec_fnパラメーターを指摘してくれました。
preexec_fnが呼び出し可能オブジェクトに設定されている場合、このオブジェクトは、子が実行される直前に子プロセスで呼び出されます。(Unixのみ)
したがって、次のコードで問題が解決します(UNIXのみ)。
import subprocess
import signal
def preexec_function():
# Ignore the SIGINT signal by setting the handler to the standard
# signal handler SIG_IGN.
signal.signal(signal.SIGINT, signal.SIG_IGN)
my_process = subprocess.Popen(
["my_executable"],
preexec_fn = preexec_function
)
注:シグナルがサブプロセスに到達することは実際には妨げられません。代わりに、上記のpreexec_fnはシグナルのデフォルトハンドラーを上書きして、シグナルが無視されるようにします。したがって、サブプロセスがSIGINTハンドラーを再度上書きすると、このソリューションは機能しない可能性があります。
別の注意:このソリューションは、あらゆる種類のサブプロセスで機能します。つまり、Pythonで記述されたサブプロセスにも制限されません。たとえば、ラッパーを作成している専用サーバーは、実際にはJavaで作成されています。