UNIX和Linux系统中的进程、环境与程序控制
1. 信号(Signals)
在UNIX和Linux系统里,内核掌控着众多进程,这些进程可能由不同用户创建,其中包含许多系统正常运行所必需的“系统”进程。内核允许进程之间通过发送“消息”进行通信。系统中的任何进程都能向其他进程发送消息,不过由于进程和消息数量众多,UNIX将这些消息限制得非常简单。
这些消息被称作信号(signals),每个信号以单字节形式存在。它们是针对进程的指令,例如“kill”(立即停止运行)和“stop”(使进程暂停)。信号与进程调度相关,即决定进程何时以及按何种顺序执行。用户可使用“kill”命令向特定进程发送信号。
有一个特殊的信号“SIGKILL”,当进程接收到该信号时会立即被销毁。例如,要终止“sleep”进程,可输入以下命令:
$ kill -s KILL 16403这里的“kill”命令加上“-s”选项(表示信号),会把“-s”后面指定的信号发送给PID为最后一个参数的进程。需要注意的是,尽管这个信号被称为“SIGKILL”,但传递给“kill”命令时只需使用“KILL”,因为所有信号都以“SIG”开头,在需要信号名称的上下文中,“SIG”是多余的。此外,还有许多其他信号,如“SIGHUP”和“SIGTTIN”等。
有时我们需要销毁进程,比如后台运行的进程可能因软件编写不佳而被误留在后台,或者原本以为会长时间运行的程序因错误无法结束。虽然UNIX将进程作为“程序”的基本概念,但记住进程ID(PID)可能比较麻烦,因此有更“用户友好”的进程处理方法——作业控制(