也就是说,每次您按 Ctrl + Z 时,您的 shell 将向前台发送 SIGSTOP 信号。bg 命令发送 SIGCONT。而 Ctrl + C 则会发送 SIGTERM,要求立即终止进程。
一些信号可以被某个进程阻塞,应用程序可以通过设计,显式地“捕捉 (catch)信号,并以一种特殊的方式对每个事件作出反应。例如,系统服务 xinetd 会按需要启动其他网络服务,它在收到 SIGHUP 时会重新读取它的配置文件。在 Linux 中,向 init 发送信号,可能会改变系统的运行级别,甚至会导致系统关闭。.(这里有一个问题:kill %1 和 kill 1 有什么区别?
进程甚至可以给自己发送信号。想像一下,您正在编写一个游戏,想留给用户五秒钟时间作出反应。您的代码可以设置一个五秒钟的定时器,接下来继续进行重绘屏幕等操作。当定时器的时间耗尽后,将有一个 SIGALRM 信号被送回您的进程。呯!时间到!
(这里提供了问题的答案:kill %1 会终止标签为 1 的后台工作。kill 1 会终止 init,当必须关闭计算机时,将向操作系统发送这个信号。)
在特殊情况下,操作系统还可以将一些其他信号传送给进程。内存违例会引发 SIGSEGV 信号,立即终止进程,并留下一个内核转储。有一个特殊的信号 SIGKILL 是无法被阻塞或捕捉的,它会立即终止某个进程。
和 Unix 中许多其他资源一样,您只能向您拥有的进程发送信号。这可以防止您终止重要的系统服务和其他用户的进程。超级用户 root 可以向任何进程发送信号。
更多魔法揭密
UNIX 有许多可活动的部分。它有系统服务、设备、内存管理器等等。好在这些复杂的花样大都被隐藏起来,不会被看到,或可以通过用户界面(如 shell 或窗口工具)很方便地使用。更妙的是,如果您想深入探究,随时都可以使用 top, ps 和 kill 等专用工具。
现在您已经知道了进程的工作原理,可以组成自己的单人乐队了。只有一个要求:成为一只自由自在的飞鸟!
标签: