一、Linux信号量
一)kill命令
用于终止指定的进程(terminate a process),是 Unix/Linux 下进程管理的常用命令。
1、用途
通常在需要终止某个或某些进程时,先使用 ps/pidof/pstree/top 等工具获取进程 pid,然后用 kill 杀掉进程。
向指定的进程或进程组发送信号(The command kill sends the specified signal to the specified process or process group),或者确定进程号为 pid 的进程是否还在。例如,许多程序都
HUP 信号作为重新读取配置文件的触发条件。
2、kill的命令格式
发送 TERM 信号到指定进程,如果进程没有捕获该信号,则进程终止
3、kill可操作的信号量
二)信号量大全
编号 | 信号名称 | 缺省动作 | 说明 |
1 | SIGHUP | 终止 | 挂起,终止控制终端或进程 |
2 | SIGINT | 终止 | 键盘产生的中断(Ctrl-C) |
3 | SIGQUIT | dump | 键盘产生的退出 |
4 | SIGILL | dump | 非法指令 |
5 | SIGTRAP | dump | debug中断 |
6 | SIGABRT/SIGIOT | dump | 异常中止 |
7 | SIGBUS/SIGEMT | dump | 总线异常/EMT指令 |
8 | SIGFPE | dump | 浮点运算溢出 |
9 | SIGKILL | 终止 | 强制进程终止;不能被捕获 |
10 | SIGUSR1 | 终止 | 用户信号,进程可自定义用途 |
11 | SIGSEGV | dump | 非法内存地址引用 |
12 | SIGUSR2 | 终止 | 用户信号,进程可自定义用途 |
13 | SIGPIPE | 终止 | 向某个没有读取的管道中写入数据 |
14 | SIGALRM | 终止 | 时钟中断(闹钟) |
15 | SIGTERM | 终止 | 常规的进程终止 |
16 | SIGSTKFLT | 终止 | 协处理器栈错误 |
17 | SIGCHLD | 忽略 | 子进程退出或中断 |
18 | SIGCONT | 继续 | 如进程停止状态则开始运行 |
19 | SIGSTOP | 停止 | 停止进程运行,不能被捕获 |
20 | SIGSTP | 停止 | 键盘产生的停止,可以被捕获 |
21 | SIGTTIN | 停止 | 后台进程请求输入 |
22 | SIGTTOU | 停止 | 后台进程请求输出 |
23 | SIGURG | 忽略 | socket发生紧急情况 |
24 | SIGXCPU | dump | CPU时间限制被打破 |
25 | SIGXFSZ | dump | 文件大小限制被打破 |
26 | SIGVTALRM | 终止 | 虚拟定时时钟 |
27 | SIGPROF | 终止 | profile timer clock |
28 | SIGWINCH | 忽略 | 窗口尺寸调整 |
29 | SIGIO/SIGPOLL | 终止 | I/O可用 |
30 | SIGPWR | 终止 | 电源异常 |
31 | SIGSYS/SYSUNUSED | dump | 系统调用异常 |
三)常用信号量
1、HUP
让 Linux 缓和的执行进程关闭,然后重启。在对配置文件修改后需要重启进程时可发送此信号。
两种解释
- 被许多守护进程理解为一个重置请求.如果一个进程不用重新启动就能重新读取它的配置文件并调整自己以适应变化的话,那么HUP通常来触发这种行为.
- 由终端驱动程序生成,试图来"清除"(终止)跟某个特定终端相连的进程.
例如:
某个终端会话结束时,或者当调制解调器被挂断时,shell后台不接受HUP的信号的影响.有的用户可使用nohup来模仿这种行为.
重启命令
2、INT
当用户键入时由终端驱动程序发送的信号.这是一个终止当前操作的请求.如果捕获了这个信号,一些简单的程序应该退出,或者允许自给被终止,这也是程序没有捕获到这个信号时的默认处理方法.拥有命令行或者输入模式的那些程序应该停止它们在做的事情,清除状态,并等待用户的再次输入.
3、QUIT
停止命令
QUIT和TERM类似----不同的是:它会生成内存转储
4、KILL
同
这个强大和危险的命令迫使进程在运行时突然终止,进程在结束后不能自我清理。
危害
导致系统资源无法正常释放,一般不推荐使用,除非其他办法都无效。
立即把进程无条件的杀掉
5、TERM
友好告诉进程退出,进程先保存好数据,再正常退出。
给父进程发送一个 TERM 信号,试图杀死它和它的子进程。
请求彻底终止某项执行操作.它期望接收进程清除自给的状态并退出
6、CHLD
当一个进程中断或停止,一个 CHLD 信号被发送给父进程
默认情况下这个信号会被忽略,所以父进程必须捕获这个信号,如果他想被通知,无论什么时候一个子进程的状态发生改变。
通常的做法是:在一个信号捕获函数,调用一个wait 函数,去捕获子进程的ID 和结束终止状态