默认情况下,信号由内核处理。旧的Unix系统有15个信号。现在他们有更多。您可以检查
</usr/include/signal.h>(或杀死-l)。
CTRL+C是带有名称的信号SIGINT。
内核中也定义了处理每个信号的默认操作,通常它会终止接收信号的进程。
所有信号(但SIGKILL)都可以由程序处理。
这就是shell的作用:
- 当Shell在交互模式下运行时,此模式具有特殊的信号处理功能。
- 例如find,运行程序时,shell:
- fork本身
- 并为孩子设置默认信号处理
- 用给定的命令替换孩子(例如,用find)
- 当您按CTRL+时C,父级外壳将处理此信号,但子级将收到此信号-带有默认操作-终止。(孩子也可以实现信号处理)
您也可以trap在shell脚本中发出信号…
您也可以为交互式外壳程序设置信号处理,请尝试在您的顶部输入此内容~/.profile。(确保您已经登录并在另一个终端上进行测试-您可以锁定自己)
trap 'echo "Dont do this"' 2
现在,每当您在外壳中按CTRL+C时,它将打印一条消息。不要忘记删除行!
如果有兴趣,可以/bin/sh在此处的源代码中检查原始的旧信号处理。
在上面的注释中有一些错误信息(现已删除),因此,如果对此感兴趣的人是一个很好的链接-信号处理的工作原理。



