在Unix系統(tǒng)的多進(jìn)程程序中,Python信號模塊signal起著重要的作用。然而,由于內(nèi)核原因,Windows對信號模塊的支持并不理想。因此,本文將基于Ubuntu系統(tǒng),通過一個簡單案例來講解Pyt
在Unix系統(tǒng)的多進(jìn)程程序中,Python信號模塊signal起著重要的作用。然而,由于內(nèi)核原因,Windows對信號模塊的支持并不理想。因此,本文將基于Ubuntu系統(tǒng),通過一個簡單案例來講解Python信號模塊signal的使用。
查看所有信號
首先,我們需要打開Ubuntu虛擬機,并在終端輸入命令kill -l來查看所有信號。以下是顯示結(jié)果:
```
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
```
編寫信號處理函數(shù)
接下來,我們使用vi命令創(chuàng)建一個名為的文件,并在其中編寫以下代碼:
```python
import signal
import time
def Handler(signum, frame):
print("kill message")
(, Handler)
(4)
print('game over')
```
這段代碼首先導(dǎo)入了信號模塊signal,然后定義了一個處理函數(shù)Handler。接著,我們注冊了處理函數(shù)與終端停止符對應(yīng)的信號SIGTSTP。最后,程序暫停了4秒鐘,然后打印出了"game over"。
運行代碼并中止程序
在終端中運行代碼,當(dāng)代碼運行時按下電腦的CTRL Z組合鍵,即可中止程序。結(jié)果如下圖所示:
```
$ python3
^Z
kill message
```
從輸出結(jié)果可以看出,成功打印出了"kill message",說明信號被正確地收到并處理。
等待信號
我們還可以使用(4)替換為(),讓進(jìn)程暫停等待信號的到來。
定時發(fā)送信號
此外,我們還可以修改中的代碼,實現(xiàn)定時發(fā)送信號的功能。具體代碼如下:
```python
import signal
def Handler(signum, frame):
print("Now, it's the time")
exit()
(, Handler)
(5)
while True:
pass
```
這段代碼使用(5)來決定在5秒后發(fā)送信號SIGALRM。而Handler函數(shù)會在收到該信號后打印出"Now, it's the time"并退出程序。
接收到定時信號
在終端中運行代碼后,等待5秒鐘,我們將收到定時信號:
```
$ python3
Now, it's the time
```
以上就是Python信號模塊signal的簡單使用方法。通過本文所講解的案例,相信你對Python信號模塊的基本使用有了更深入的了解。