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

前端之家收集整理的这篇文章主要介绍了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

原文链接:https://www.f2er.com/bash/390533.html

猜你在找的Bash相关文章