亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Python > 正文

淺析Python中signal包的使用

2020-01-04 17:57:57
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了Python中signal包的使用,主要在Linux系統下對進程信號進行相關操作,需要的朋友可以參考下

在liunx系統中要想每隔一分鐘執行一個命令,最普遍的方法就是crontab了,如果不想使用crontab,經同事指點在程序中可以用定時器實現這種功能,于是就開始摸索了,發現需要一些信號的知識...

查看你的linux支持哪些信號:kill -l 即可

 

 
  1. root@server:~# 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

root@server:~#

信號:進程之間通訊的方式,是一種軟件中斷。一個進程一旦接收到信號就會打斷原來的程序執行流程來處理信號。操作系統規定了進程收到信號以后的默認行為,但是,我們可以通過綁定信號處理函數來修改進程收到信號以后的行為,有兩個信號是不可更改的SIGTOP和SIGKILL。

發送信號一般有兩種原因:

1(被動式) 內核檢測到一個系統事件.例如子進程退出會像父進程發送SIGCHLD信號.鍵盤按下control+c會發送SIGINT信號

2(主動式) 通過系統調用kill來向指定進程發送信號

在C語言中有個setitimer函數,函數setitimer可以提供三種定時器,它們相互獨立,任意一個定時完成都將發送定時信號到進程,并且自動重新計時。參數which確定了定時器的類型:

ITIMER_REAL 定時真實時間,與alarm類型相同。 SIGALRM

ITIMER_VIRT 定時進程在用戶態下的實際執行時間。 SIGVTALRM

ITIMER_PROF 定時進程在用戶態和核心態下的實際執行時間。 SIGPROF

這三種定時器定時完成時給進程發送的信號各不相同,其中ITIMER_REAL類定時器發送SIGALRM信號,ITIMER_VIRT類定時器發送SIGVTALRM信號,ITIMER_REAL類定時器發送SIGPROF信號。

函數alarm本質上設置的是低精確、非重載的ITIMER_REAL類定時器,它只能精確到秒,并且每次設置只能產生一次定時。函數setitimer設置的定時器則不同,它們不但可以計時到微妙(理論上),還能自動循環定時。在一個Unix進程中,不能同時使用alarm和ITIMER_REAL類定時器。

SIGINT 終止進程 中斷進程 (control+c)

SIGTERM 終止進程 軟件終止信號

SIGKILL 終止進程 殺死進程

SIGALRM 鬧鐘信號

前期的知識也準備的差不多了,該向python的signal進軍了。

定義信號名

signal包定義了各個信號名及其對應的整數,比如

 

 
  1. import signal 
  2. print signal.SIGALRM 
  3. print signal.SIGCONT 

Python所用的信號名和Linux一致。你可以通過

 

 
  1. $man 7 signal 

查詢

預設信號處理函數

signal包的核心是使用signal.signal()函數來預設(register)信號處理函數,如下所示:

 

 
  1. singnal.signal(signalnum, handler) 

signalnum為某個信號,handler為該信號的處理函數。我們在信號基礎里提到,進程可以無視信號,可以采取默認操作,還可以自定義操作。當handler為signal.SIG_IGN時,信號被無視(ignore)。當handler為singal.SIG_DFL,進程采取默認操作(default)。當handler為一個函數名時,進程采取函數中定義的操作。

 

 
  1. import signal 
  2. # Define signal handler function 
  3. def myHandler(signum, frame): 
  4. print('I received: ', signum) 
  5.  
  6. # register signal.SIGTSTP's handler  
  7. signal.signal(signal.SIGTSTP, myHandler) 
  8. signal.pause() 
  9. print('End of Signal Demo'

在主程序中,我們首先使用signal.signal()函數來預設信號處理函數。然后我們執行signal.pause()來讓該進程暫停以等待信號,以等待信號。當信號SIGUSR1被傳遞給該進程時,進程從暫停中恢復,并根據預設,執行SIGTSTP的信號處理函數myHandler()。myHandler的兩個參數一個用來識別信號(signum),另一個用來獲得信號發生時,進程棧的狀況(stack frame)。這兩個參數都是由signal.singnal()函數來傳遞的。

上面的程序可以保存在一個文件中(比如test.py)。我們使用如下方法運行:

 

 
  1. $python test.py 

以便讓進程運行。當程序運行到signal.pause()的時候,進程暫停并等待信號。此時,通過按下CTRL+Z向該進程發送SIGTSTP信號。我們可以看到,進程執行了myHandle()函數, 隨后返回主程序,繼續執行。(當然,也可以用$ps查詢process ID, 再使用$kill來發出信號。)

(進程并不一定要使用signal.pause()暫停以等待信號,它也可以在進行工作中接受信號,比如將上面的signal.pause()改為一個需要長時間工作的循環。)

我們可以根據自己的需要更改myHandler()中的操作,以針對不同的信號實現個性化的處理。

定時發出SIGALRM信號

一個有用的函數是signal.alarm(),它被用于在一定時間之后,向進程自身發送SIGALRM信號:

 

 
  1. import signal 
  2. # Define signal handler function 
  3. def myHandler(signum, frame): 
  4. print("Now, it's the time"
  5. exit() 
  6.  
  7. # register signal.SIGALRM's handler  
  8. signal.signal(signal.SIGALRM, myHandler) 
  9. signal.alarm(5) 
  10. while True: 
  11. print('not yet'

我們這里用了一個無限循環以便讓進程持續運行。在signal.alarm()執行5秒之后,進程將向自己發出SIGALRM信號,隨后,信號處理函數myHandler開始執行。

發送信號

signal包的核心是設置信號處理函數。除了signal.alarm()向自身發送信號之外,并沒有其他發送信號的功能。但在os包中,有類似于linux的kill命令的函數,分別為

 

 
  1. os.kill(pid, sid) 
  2.  
  3. os.killpg(pgid, sid) 

分別向進程和進程組(見Linux進程關系)發送信號。sid為信號所對應的整數或者singal.SIG*。

實際上signal, pause,kill和alarm都是Linux應用編程中常見的C庫函數,在這里,我們只不過是用Python語言來實現了一下。實際上,Python 的解釋器是使用C語言來編寫的,所以有此相似性也并不意外。此外,在Python 3.4中,signal包被增強,信號阻塞等功能被加入到該包中。我們暫時不深入到該包中。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲免费福利视频| 久久色免费在线视频| 91精品国产高清久久久久久久久| 久久精品中文字幕电影| 亚洲精品少妇网址| 亚洲最大成人免费视频| 亚洲视频在线播放| 午夜精品在线观看| 久久久99免费视频| 亚洲国产精久久久久久| 国产极品精品在线观看| 97免费中文视频在线观看| 久久久久久久久久久av| 国产精品高潮呻吟视频| 热久久99这里有精品| 欧美日韩国产精品一区二区不卡中文| 精品欧美国产一区二区三区| 最近日韩中文字幕中文| 国产精品美女免费看| 日韩在线观看免费高清| 中文字幕亚洲在线| 超薄丝袜一区二区| 午夜免费久久久久| 中文字幕亚洲无线码在线一区| 日韩国产激情在线| 久久久久久久久久久91| 岛国av午夜精品| 国产成人免费91av在线| 在线观看日韩欧美| 另类天堂视频在线观看| 欧美网站在线观看| 日韩国产高清视频在线| 久久91亚洲精品中文字幕| 亚洲高清色综合| 91中文在线视频| 国产一区二区在线免费视频| 色偷偷噜噜噜亚洲男人的天堂| 日韩av电影手机在线| 91精品国产高清自在线看超| 亚洲精品电影在线观看| 精品久久久久久国产91| 亚洲精品一区二区久| 91国产高清在线| 欧美另类极品videosbestfree| 久久青草精品视频免费观看| 亚洲美女性生活视频| 中文字幕av一区中文字幕天堂| 国产91ⅴ在线精品免费观看| 一区二区日韩精品| 国产网站欧美日韩免费精品在线观看| 欧美综合国产精品久久丁香| 亚洲一区制服诱惑| 琪琪亚洲精品午夜在线| 久久精品视频在线播放| 久久国产精品久久久久久| 最近2019年日本中文免费字幕| 久久精品国产2020观看福利| 91色视频在线导航| 色中色综合影院手机版在线观看| 欧美一区视频在线| 在线亚洲国产精品网| 综合网中文字幕| 日韩av电影在线网| www.亚洲成人| 精品在线小视频| 国产视频久久网| 美女国内精品自产拍在线播放| 久久久久久久久久久免费| 国产综合在线看| 国产啪精品视频| 亚洲欧美国产精品va在线观看| 国产精品99久久久久久白浆小说| 亚洲欧美中文日韩在线| 国产啪精品视频| 国产在线观看91精品一区| 日韩欧美精品中文字幕| 久久99精品久久久久久噜噜| 精品电影在线观看| 日本中文字幕久久看| 久久人人爽人人爽人人片av高请| 日韩视频亚洲视频| 九九热最新视频//这里只有精品| 色综合久久88色综合天天看泰| 亚洲区在线播放| 91av在线免费观看视频| 97久久国产精品| 欧美又大又硬又粗bbbbb| 国产精品pans私拍| 国模视频一区二区三区| 国产日韩一区在线| 久久激情五月丁香伊人| 日韩精品高清在线| 久久久精品美女| 日韩美女视频在线观看| 日韩欧美黄色动漫| 北条麻妃99精品青青久久| 欧美性资源免费| 久久久久久久久中文字幕| 国产精品久久久91| 亚洲国产成人精品一区二区| 欧美黑人又粗大| 日本aⅴ大伊香蕉精品视频| 国产大片精品免费永久看nba| 亚洲色图美腿丝袜| 91精品久久久久久久久| 日韩在线观看网址| 久久久久久中文字幕| 免费av在线一区| 亚洲一区二区在线播放| 91福利视频网| 亚洲第一精品夜夜躁人人躁| 亚洲第一精品夜夜躁人人躁| 欧美午夜激情视频| 美女福利视频一区| 欧美日韩裸体免费视频| 亚洲女同性videos| 免费91在线视频| 欧美性xxxxx极品| 国产日韩在线视频| 日韩美女主播视频| 超碰精品一区二区三区乱码| 色诱女教师一区二区三区| 成人在线视频福利| 亚洲精品永久免费精品| 国产又爽又黄的激情精品视频| www日韩欧美| 国产成人avxxxxx在线看| 国产精品久久久久秋霞鲁丝| 国产成人中文字幕| 欧美精品九九久久| 668精品在线视频| 在线视频欧美日韩精品| 亚洲三级黄色在线观看| 九九久久久久99精品| 亚洲aa在线观看| 日韩av电影中文字幕| 精品久久久久久久久久久| 国产精品观看在线亚洲人成网| 欧美自拍视频在线| 欧美亚洲另类激情另类| 国产精品久在线观看| 久久69精品久久久久久久电影好| 国产精品免费网站| 8090成年在线看片午夜| 亚洲曰本av电影| 国产成人精品av| 国产精品久久久久久五月尺| 欧美伊久线香蕉线新在线| 日韩最新中文字幕电影免费看| 国产日韩欧美自拍| 91国产精品91| 日韩电影在线观看永久视频免费网站| 日本道色综合久久影院| 中文字幕v亚洲ⅴv天堂| 亚洲国产另类久久精品| 69影院欧美专区视频| 91国产视频在线播放| 欧美日韩激情视频8区| 免费97视频在线精品国自产拍| 日韩美女免费线视频| 亚洲色图17p| 欧美性在线视频| 久久99热这里只有精品国产| 亚洲qvod图片区电影|