Skip to content

Commit b13078c

Browse files
committed
add one tag
Change-Id: I0c7fccb6bb55363e29d65ca5635f60c753d977f7
1 parent eccfb8a commit b13078c

File tree

4 files changed

+158
-0
lines changed

4 files changed

+158
-0
lines changed

README.md

+2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
-----
44

5+
![visitors](https://visitor-badge.glitch.me/badge?page_id=github.windard.python_lib)
6+
57
python的强大之处有很大的一方面在于它有各种各样非常强大的库,那么,这篇博客就是记录我学习各种的库的经历吧。
68
>声明:
79
>本人使用的Python版本为 Python2.7.10,Windows 10 操作系统环境下,或者是 Python2.7.10,Ubuntu15 下。

code/kill_signal.py

+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# -*- coding: utf-8 -*-
2+
3+
import os
4+
import time
5+
import logging
6+
import signal
7+
8+
logger = logging.getLogger(__name__)
9+
logging.basicConfig(
10+
level=logging.INFO,
11+
format='%(name)-25s %(asctime)s %(levelname)-8s %(lineno)-4d %(message)s',
12+
datefmt='[%Y %b %d %a %H:%M:%S]',
13+
)
14+
15+
16+
def receive_signal(signum, stack):
17+
logger.info('Received: %s', signum)
18+
19+
20+
if __name__ == '__main__':
21+
22+
# Register signal handlers
23+
signal.signal(signal.SIGHUP, receive_signal)
24+
signal.signal(signal.SIGINT, receive_signal)
25+
signal.signal(signal.SIGQUIT, receive_signal)
26+
# signal.signal(signal.SIGKILL, receive_signal)
27+
# signal.signal(signal.SIGSTOP, receive_signal)
28+
29+
signal.signal(signal.SIGTERM, receive_signal)
30+
signal.signal(signal.SIGTSTP, receive_signal)
31+
signal.signal(signal.SIGCONT, receive_signal)
32+
33+
signal.signal(signal.SIGUSR1, receive_signal)
34+
signal.signal(signal.SIGUSR2, receive_signal)
35+
36+
# Print the process ID so it can be used with 'kill'
37+
# to send this program signals.
38+
logger.info('My PID is: %s', os.getpid())
39+
40+
for i in range(20):
41+
logger.info('Waiting...')
42+
time.sleep(30)

content/logging.md

+8
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,14 @@ if __name__ == '__main__':
140140

141141
logging 如果不配置是没有数据输出的,但是如果不想写这么长的配置怎么办呢?直接使用 `logging.basicConfig()` 进行一个简单的基础配置。
142142

143+
```
144+
logging.basicConfig(
145+
level=logging.INFO,
146+
format='%(name)-25s %(asctime)s %(levelname)-8s %(lineno)-4d %(message)s',
147+
datefmt='[%Y %b %d %a %H:%M:%S]'
148+
)
149+
```
150+
143151
示例代码
144152

145153
```

content/signal.md

+106
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,52 @@ if __name__ == '__main__':
105105
106106
```
107107

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+
108154
### 所有信号
109155

110156
```
@@ -308,3 +354,63 @@ if __name__ == '__main__':
308354
print request("http://127.0.0.1:5000/")
309355
310356
```
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

Comments
 (0)