Linux信号量

Posted 林海峰4573

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux信号量相关的知识,希望对你有一定的参考价值。

一、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的命令格式

kill <pid>  
等价于 (TERM是默认信号量)
kill

  发送 TERM 信号到指定进程,如果进程没有捕获该信号,则进程终止

  3、kill可操作的信号量

# kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX

  二)信号量大全

编号

信号名称

缺省动作

说明

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

kill -s HUP pid
HUP 1

  让 Linux 缓和的执行进程关闭,然后重启。在对配置文件修改后需要重启进程时可发送此信号。

  两种解释

  1. 被许多守护进程理解为一个重置请求.如果一个进程不用重新启动就能重新读取它的配置文件并调整自己以适应变化的话,那么HUP通常来触发这种行为.
  2. 由终端驱动程序生成,试图来"清除"(终止)跟某个特定终端相连的进程.
    例如:
    某个终端会话结束时,或者当调制解调器被挂断时,shell后台不接受HUP的信号的影响.有的用户可使用nohup来模仿这种行为.

  重启命令

ExecReload=/bin/kill

  2、INT

INT 2

  当用户键入时由终端驱动程序发送的信号.这是一个终止当前操作的请求.如果捕获了这个信号,一些简单的程序应该退出,或者允许自给被终止,这也是程序没有捕获到这个信号时的默认处理方法.拥有命令行或者输入模式的那些程序应该停止它们在做的事情,清除状态,并等待用户的再次输入.

  3、QUIT

QUIT 3

 

  停止命令

ExecStop=/bin/kill

  QUIT和TERM类似----不同的是:它会生成内存转储

  4、KILL

kill -s KILL pid
KILL 9

  同

kill -9

  这个强大和危险的命令迫使进程在运行时突然终止,进程在结束后不能自我清理。

  危害
  导致系统资源无法正常释放,一般不推荐使用,除非其他办法都无效。

  立即把进程无条件的杀掉

  5、TERM

kill -s TERM pid
TERM 15

  友好告诉进程退出,进程先保存好数据,再正常退出。

  给父进程发送一个 TERM 信号,试图杀死它和它的子进程。

  请求彻底终止某项执行操作.它期望接收进程清除自给的状态并退出

  6、CHLD

CHLD 17

  当一个进程中断或停止,一个 CHLD 信号被发送给父进程

  默认情况下这个信号会被忽略,所以父进程必须捕获这个信号,如果他想被通知,无论什么时候一个子进程的状态发生改变。

  通常的做法是:在一个信号捕获函数,调用一个wait 函数,去捕获子进程的ID 和结束终止状态

 

 



以上是关于Linux信号量的主要内容,如果未能解决你的问题,请参考以下文章

IPC——信号

Linux信号及工作原理

linux可重入异步信号安全和线程安全

linux可重入异步信号安全和线程安全

Python模块之信号学习(signal)

Linux信号