一、处理信号
Linux利用信号与运行在系统中的进程进行通信,进程的信号就是预定义好的一个消息,进程能识别它并决定是忽略还是做出反应。进程如何处理信号是由开发人员通过编程来决定的,大多数编写完善的程序都能接收和处理标准Unix进程信号。Linux进程信号如下:
信号
名称
描述
1
SIGHUP
挂起进程
2
SIGINT
终止进程
3
SIGQUIT
停止进程
9
SIGKILL
无条件终止进程
15
SIGTERM
尽可能终止进程
17
SIGSTOP
无条件停止进程,但不是终止进程
18
SIGTSTP
停止或暂停进程,但不终止进程
19
SIGCONT
继续运行停止的进程
~
进程和作业的区别:
区别:进程是一个程序在一个数据集上的一次执行,而作业是用户提交给系统的一个任务。
关系:一个作业通常包括几个进程,几个进程共同完成一个任务,即作业。
用户提交作业以后,当作业被调度,系统会为作业创建进程,一个进程无法完成时,系统会为这个进程创建子进程。
1. 生成信号
bash shell允许用键盘上的组合键生成两种基本的Linux信号,在需要停止或暂停失控程序时非常方便。
1. 中断进程
CTRL+C组合键会生成SIGINT信号,并将其发送给当前shell中运行的所有进程。
如图,执行sleep过程中,使用CTRL+C可以中断此sleep命令。
2. 暂停进程
你可以在程序运行期间暂停进程,而无需终止它。CTRL+Z会生成一个SIGTSTP信号,停止shell中运行的任何进程。停止和终止进程不同:停止进程会让程序继续保留在内存中,并能从上次暂停的位置继续运行。
同理,我们使用CTRL+Z时,可以发现此进程是暂停了,使用kill命令发送SIGKILL信号可以将其终止。
二、后台模式运行脚本
以后台模式运行脚本或命令非常简单,只需要在命令后加一个&符号就可以了。如下示例:
加上了&符号的sleep命令后,显示的第一行为作业号和PID,Linux系统中每个进程都有唯一的PID。此时用jobs命令查看,会发现它正在running状态。当其运行完以后运行jobs可以发现