linux - 为什么 SIGINT 可以在终端中停止 bash 而不是通过 kill -INT?

标签 linux bash shell signals

我注意到当我像这样通过 bash 脚本运行挂起进程时

foo.sh:

sleep 999

如果我通过命令运行它,然后按 Ctrl+C

./foo.sh
^C

sleep 会被打断。但是,当我尝试用 SIGINT 杀死它时

ps aux | grep foo
kill -INT 12345  # the /bin/bash ./foo.sh process

然后看起来 bash 和 sleep 忽略了 SIGINT 并继续运行。这让我很吃惊。我认为 Ctrl + C 实际上是将 SIGINT 发送到前台进程,那么为什么终端中的 Ctrl + C 和 kill -INT 的行为不同?

最佳答案

CtrlC 实际上发送 SIGINT 到前台进程 group (它由一个 bash 进程,以及一个 sleep 进程)。要使用 kill 命令执行相同操作,请将信号发送到进程组,例如:

kill -INT -12345

关于linux - 为什么 SIGINT 可以在终端中停止 bash 而不是通过 kill -INT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24950251/

相关文章:

javascript - 在Linux上部署后未能加载某些JS文件。在Windows上也一样

c - 在用户写入的同时写入输出

linux - 找到直方图的最小值

linux - 将文件内容传递给 docker exec

linux - 找不到在 Linux 上构建 maven 项目的 mvn 命令

linux - Linux 终端上的 Git 提交消息

linux - 使用 Bash 脚本从 xdotool 搜索结果中检索单个元素

bash - 为什么 "if 0;"在 shell 脚本中不起作用?

Bash 动态命令行输出

android - 连接多个设备时如何使用 ADB Shell? "error: more than one device and emulator"失败