加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-15 16:17:51 所属栏目:安全 来源:网络整理
导读:我试图理解如何Ctrl-C终止一个孩子,但不是一个父进程。我在一些脚本shell中看到这种行为,像bash,你可以启动一些长时间运行的进程,然后通过输入Ctrl-C终止它,然后控制返回到shell。 你能解释它是如何工作的,特别是为什么不是父(shell)进程终止? shell
我试图理解如何Ctrl-C终止一个孩子,但不是一个父进程。我在一些脚本shell中看到这种行为,像bash,你可以启动一些长时间运行的进程,然后通过输入Ctrl-C终止它,然后控制返回到shell。

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

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

默认情况下的信号由内核处理。旧的Unix系统有默认的15个信号,现在他们有更多。您可以检查< /usr/include/signal.hu0026gt; (或杀死-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。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读