我一直在调试一个 Python 程序,该程序在收到KeyboardInterrupt
异常后会出现段错误。这通常是通过Ctrl+C从外壳按下来完成的。为了测试特定的代码更改是否修复了这个错误,我有一个小的 shell 脚本,它SIGINT
在启动后随机发送给程序。我遇到的问题是发送Ctrl+C似乎对程序的影响与发送信号不同SIGINT
,因此不会导致错误出现,所以我很想知道这两个动作之间有什么区别。
该程序根本不会捕获任何键盘操作,只是一个带有一些线程/进程的 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