gpt4 book ai didi

unix - Ctrl-C 和 SIGINT 有什么区别?

转载 作者:行者123 更新时间:2023-12-03 10:03:00 25 4
gpt4 key购买 nike

我一直在调试一个 Python 程序,它在收到 KeyboardInterrupt 后出现段错误。异常(exception)。这通常是通过在 shell 中按 Ctrl+C 来完成的。为了测试特定的代码更改是否修复了错误,我有一个发送 SIGINT 的小 shell 脚本。启动后随机进入程序。我的问题是发送 Ctrl+C 似乎对程序的影响与发送信号 SIGINT 的效果不同。因此不会导致错误出现,所以我很想知道这两个操作之间有什么区别。

该程序根本不捕获任何键盘操作,只是一个包含一些线程/进程的 python 程序。它不安装信号处理程序(尽管 Python 有),而且 stty -aintr = ^C .我怀疑可能是 Ctrl+C 发送了 SIGINT到所有子进程/线程,而 kill -INT只发送到主要进程,但这就是我的怀疑。

这是发送 kill -INT 的 shell 脚本.

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

最佳答案

^C发送 SIGINT到前台进程组中的所有进程。用 kill 做等效的事情,您应该将信号发送到进程组(操作系统级概念):

kill -SIGINT -<pid>

或到工作( shell 级概念,管道以 & 结束):
kill -SIGINT %

关于unix - Ctrl-C 和 SIGINT 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8398845/

25 4 0
文章推荐: powershell - 在搜索中过滤掉子 OU
文章推荐: javascript - 从javascript中的关键字数组计算字符串中的出现次数
文章推荐: javascript - 如何使整个
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com