Linux利用信号与运行在系统中的进程进行通信。
可以编写脚本使其收到特定信号时执行某些命令,从而控制shell脚本的操作。
linux常见信号
信号 | 值 | 描述 |
1 | SIGHUP | 挂起进程 |
2 | SIGINT | 终止进程 |
3 | SIGQUIT | 停止进程 |
9 | SIGKILL | 强制终止进程 |
15 | SIGTERM | 正常终止进程 |
17 | SIGSTOP | 强制停止进程 |
18 | SIGTSTP | 停止或暂停进程 |
19 | SIGCONT | 继续运行停止的进程 |
默认情况下bash shell会忽略收到的3,15信号,这样使交互式shell不会意外终止。
bash shell会接收1,2信号,如离开一个交互式shell之前,shell会把1信号即挂起信号传给所有由该shell启动的进程。
通过2信号,中断shell,Linux内核会停止为shell分配CPU处理时间,同样shell会把该信号传给由他启动的进程。
linux使用键盘组合键生成停止或暂停两种基本信号
ctrl+c生成2信号,终止进程
[root@tzPC ~]# sleep 100 ^C
ctrl+z生成18信号,停止shell中运行的进程,停止进程会让程序继续保存在内存中并能从上次暂停的位置继续运行。
[1]是shell分配的作业号,shell把运行中的每个进程称为作业并为其分配唯一的作业号
[root@tzPC ~]# sleep 100 ^Z [1]+ 已停止 sleep 100
jobs查看后台停止的进程
[root@tzPC ~]# jobs [1]+ 已停止 sleep 100
将后台停止的进程恢复到前台运行
[root@tzPC ~]# fg 1
如果shell会话中有一个已停止的作业再退出shell时bash会提醒你
[root@tzPC ~]# sleep 100 ^Z [1]+ 已停止 sleep 100 [root@tzPC ~]# exit exit 有停止的任务。
使用ps -l查看已停止的作业
[root@tzPC ~]# ps -l F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 4 S 0 89099 89094 0 80 0 - 28912 do_wai pts/0 00:00:00 bash 0 T 0 91144 89099 0 80 0 - 26976 do_sig pts/0 00:00:00 sleep 0 R 0 91231 89099 0 80 0 - 37235 - pts/0 00:00:00 ps
知道了已停止作业的PID,可以使用kill命令发送SIGKILL信号终止他
[root@tzPC ~]# kill -9 91144
trap命令
捕获信号并执行其他命令
语法格式
trap commands signals
signals可以是数值或linux信号名
#待补充
原文:https://www.cnblogs.com/tz90/p/13533942.html