微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

bash – Ctrl-C如何终止子进程?

我试图理解如何Ctrl-C终止一个孩子,但不是一个父进程。我在一些脚本shell中看到这种行为,像bash,你可以启动一些长时间运行的进程,然后通过输入Ctrl-C终止它,然后控制返回到shell。

你能解释它是如何工作的,特别是为什么不是父(shell)进程终止?

shell是否必须对Ctrl-C事件做一些特殊的处理,如果是的话,它究竟是做什么的?

认情况下的信号由内核处理。旧的Unix系统有认的15个信号,现在他们有更多。您可以检查< /usr/include/signal.h\u0026gt; (或杀死-l)。 CTRL C是名称为SIGINT的信号。 处理每个信号的认动作也在内核中定义,通常它终止接收到信号的进程。 所有信号(但SIGKILL)可以由程序处理。 这是shell做的:
>当shell以交互模式运行时,他对此模式有一个特殊的信号处理。
>当你运行一个程序,例如find,shell:

> shell fork本身
>并为孩子设置认信号处理
>用给定的命令替换孩子(例如用find)
>当你按下CTRL C,父shell处理这个信号,但孩子会收到它 – 使用认操作 – 终止。 (孩子也可以实现信号处理)

你可以在shell脚本中捕获信号…

你也可以为你的交互式shell设置信号处理,尝试输入这个在你〜/ .profile的顶部。 (确保你已经登录,并与另一个终端测试 – 你可以锁定自己)

trap 'echo "Dont do this"' 2

现在,每当你在你的shell中按CTRL C,将打印一条消息。不要忘记删除线!

如果感兴趣,可以在源代码here中检查普通旧/ bin / sh信号处理。

在上面有一些错误的意见(现已删除),所以如果有人感兴趣的是一个非常好的链接how the signal handling works

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐