例外を受け取った後にsegfaultsするPythonプログラムをデバッグしていKeyboardInterrupt
ます。これは通常Ctrl+C、シェルから押すことによって行われます。SIGINT
特定のコード変更でバグが修正されたかどうかをテストするために、起動後ランダムにプログラムに送信される小さなシェルスクリプトを用意しました。私が抱えている問題は、Ctrl+C送信が信号の送信とはプログラムに異なる影響を及ぼしSIGINT
、バグが発生しないように見えることです。そのため、2つのアクションの違いは何でしょうか。
このプログラムはキーボードアクションをまったくキャッチせず、いくつかのスレッド/プロセスを含むPythonプログラムです。シグナルハンドラーをインストールせず(Pythonはインストールしますが)、をstty -a
提供しintr = ^C
ます。すべてのサブプロセス/スレッドに送信し、プライマリプロセスにのみ送信する可能性があると思いますが、それは私の疑いの範囲ですCtrl+C。SIGINT
kill -INT
を送信するシェルスクリプトは次のとおりkill -INT
です。
wait
while :; do
seconds="$(python -c 'import random; print random.random()*4')"
./mandos --debug --configdir=confdir \
--statedir=statedir --no-restore --no-dbus &
pid=$!
{ sleep $seconds; kill -INT $pid; } &
fg %./mandos
status=$?
if [ $status -gt 1 ]; then
echo "Failed exit $status after $seconds seconds"
break
fi
wait
done