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 <pid>

  发送 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 -s HUP $PID

  2、INT

INT 2 中断(同 Ctrl + C)

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

  3、QUIT

QUIT 3 退出(同 Ctrl + \)

 

  停止命令

ExecStop=/bin/kill -s QUIT $PID

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

  4、KILL

kill -s KILL pid
KILL 9 强制终止

  同

kill -9 pid

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

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

  立即把进程无条件的杀掉

  5、TERM

kill -s TERM pid
TERM 15 终止

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

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

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

  6、CHLD

CHLD 17 中断或停止

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

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

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

 

 

posted @ 2022-07-20 16:45  思维无界限  阅读(834)  评论(0编辑  收藏  举报