@@ -105,6 +105,52 @@ if __name__ == '__main__':
105
105
106
106
```
107
107
108
+ 看一看常见的信号量
109
+
110
+ ```
111
+ # -*- coding: utf-8 -*-
112
+
113
+ import os
114
+ import time
115
+ import logging
116
+ import signal
117
+
118
+ logger = logging.getLogger(__name__)
119
+ logging.basicConfig(
120
+ level=logging.INFO,
121
+ format='%(name)-25s %(asctime)s %(levelname)-8s %(lineno)-4d %(message)s',
122
+ datefmt='[%Y %b %d %a %H:%M:%S]',
123
+ )
124
+
125
+
126
+ def receive_signal(signum, stack):
127
+ logger.info('Received: %s', signum)
128
+
129
+
130
+ if __name__ == '__main__':
131
+
132
+ # Register signal handlers
133
+ signal.signal(signal.SIGHUP, receive_signal)
134
+ signal.signal(signal.SIGINT, receive_signal)
135
+ signal.signal(signal.SIGQUIT, receive_signal)
136
+ # signal.signal(signal.SIGKILL, receive_signal)
137
+ signal.signal(signal.SIGTERM, receive_signal)
138
+ signal.signal(signal.SIGTSTP, receive_signal)
139
+ signal.signal(signal.SIGCONT, receive_signal)
140
+
141
+ signal.signal(signal.SIGUSR1, receive_signal)
142
+ signal.signal(signal.SIGUSR2, receive_signal)
143
+
144
+ # Print the process ID so it can be used with 'kill'
145
+ # to send this program signals.
146
+ logger.info('My PID is: %s', os.getpid())
147
+
148
+ for i in range(20):
149
+ logger.info('Waiting...')
150
+ time.sleep(30)
151
+
152
+ ```
153
+
108
154
### 所有信号
109
155
110
156
```
@@ -308,3 +354,63 @@ if __name__ == '__main__':
308
354
print request("http://127.0.0.1:5000/")
309
355
310
356
```
357
+
358
+ ### kill
359
+
360
+ kill,发送信号到进程,默认发送 -15 SIGTERM 的信号到指定进程
361
+
362
+ 选项
363
+
364
+ ```
365
+ -s sig 信号名称。
366
+ -n sig 信号名称对应的数字。
367
+ -l 列出信号名称。如果在该选项后提供了数字那么假设它是信号名称对应的数字。
368
+ -L 等价于 -l 选项。
369
+ -x x为信号数字,即发送指定信号到进程
370
+ ```
371
+
372
+ 常用的 信号量
373
+
374
+ | 信号量名称 | 信号量数字 | 信号量行为 |
375
+ | -----------| -------------| -----------------|
376
+ | HUP | 1 | 终端挂断,也用于进程 reload |
377
+ | INT | 2 | 中断(同 Ctrl + C) |
378
+ | QUIT | 3 | 退出(同 Ctrl + \) |
379
+ | KILL | 9 | 强制终止,不能接受信号,必须停下 |
380
+ | TERM | 15 | 终止,正常终止,可以接受信号,然后不停 |
381
+ | CONT | 18 | 继续(与STOP相反,fg/bg命令) (在 Mac 上 Ctrl + Z) |
382
+ | STOP | 19 | 暂停(同 Ctrl + Z) |
383
+
384
+ 查看信号表
385
+
386
+ ```
387
+ $ kill -l
388
+ 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
389
+ 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
390
+ 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
391
+ 16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
392
+ 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
393
+ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
394
+ 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
395
+ 38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
396
+ 43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
397
+ 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
398
+ 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
399
+ 58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
400
+ 63) SIGRTMAX-1 64) SIGRTMAX
401
+ ```
402
+
403
+ 发送的进程号 PID:每一个PID可以是以下四种情况之一:
404
+
405
+
406
+ | 状态 | 说明|
407
+ | ----| ------------------------|
408
+ | n | 当n大于0时,PID为n的进程接收信号。|
409
+ | 0 | 当前进程组中的所有进程均接收信号。|
410
+ | -1 | PID大于1的所有进程均接收信号。|
411
+ | -n | 当n大于1时,进程组n中的所有进程接收信号。当给出了一个参数的形式为“-n”,想要让它表示一个进程组,那么必须首先指定一个信号,或参数前必须有一个“--”选项,否则它将被视为发送的信号。|
412
+
413
+
414
+ ### 参考链接
415
+
416
+ [ kill] ( https://wangchujiang.com/linux-command/c/kill.html )
0 commit comments