
linux利用信号与运行在系统中的进程进行通信。可以通过对脚本进行编程,使其在收到特定信号时执行某些命令,从而控制shell脚本的操作。
linux系统信号有30多个,下表中列出来最常见的几个linux系统信号
信号 | 值 | 描述 |
---|---|---|
1 | SIGHUP | 挂起进程 |
2 | SIGINT | 终止进程 |
3 | SIGQUIT | 停止进程 |
9 | SIGKILL | 无条件终止进程 |
15 | SIGTERM | 尽可能的终止进程 |
17 | SIGSTOP | 无条件的停止进程,但不是终止进程 |
18 | SIGSTP | 停止或暂停进程,但不终止进程 |
19 | SIGCONT | 继续运行停止的进程 |
生成信号
bash shell允许用键盘上的组合键生成两种基本的linux信号。这种特性在需要停止或暂停失控程序时非常方便。
1.中断进程
Ctrl+C组合键会生成SIGINT信号,并将其发送给当前在shell中运行的所有进程。
演示代码如下:
2.暂停进程
Ctrl+Z组合键会生成一个SIGTSTP信号,停止shell中运行的任何程序,停止进程和终止进程不同,停止进程会让程序继续保留在内存中,并能从上次停止的位置继续运行。
演示代码如下:
方括号中的[1]是shell分配的作业号,shell将运行的每一个进程称为作业,并为每一个作业分配唯一的作业号。它会为第一个作业分配作业号1,第二个作业分配作业号2,以此类推。
可以通过ps -l命令查看已经停止的作业,在S列中,ps命令将已经停止的作业的状态显示为T。
如果在已经有停止作业的状态下,仍旧想退出shell,可以使用kill命令来发送一个SIGKILL信号来终止它。
演示代码如下: