導航:首頁 > 編程語言 > kill函數在python

kill函數在python

發布時間:2022-10-07 04:07:59

python中創建自定義函數的關鍵字

❷ python實現了多線程,如果使用了命令kill把正在運行的進程kill掉的話,可能某些線程會出錯,怎麼解決

主線程捕獲kill的信號以後去終止其他線程, 等其他線程完成以後, 再在主線程中退出.

不過更現代的實現並發的方法是使用非同步, 而不是多線程.

❸ python 怎麼殺死指定線程名的線程

這幾天在實踐的時候,有一個問題一直在困擾我,比如timer,定時器,Python沒有這么好的機制,需要自己實現。這個網上也是有一些。但是我自己的需求可能並不一樣。

需求:
我需要一個函數工作,比如遠程連接一個埠,遠程讀取文件等,但是我給的時間有限,比如,4秒鍾如果你還沒有讀取完成或者連接成功,我就不等了,很可能對方已經宕機或者拒絕了。這樣可以批量做一些事情而不需要一直等,浪費時間。
定時器是最好的,我覺得這個需求,一旦定時過了,就將這個讀取函數直接kill。但是這出現了問題。
第一,怎麼定時?
第二,時間到了,怎麼kill函數
第三,定時函數和kill函數怎麼判斷該kill了。
寫一個多線程,一個線程專門用來計時間,一個用來執行函數,一旦時間到了,就殺死執行函數的線程。我在多線程,python很弱,似乎沒有這樣的比較簡單的一個介面就調用的。不像windows編程。那麼,該怎辦?

結合我的需求,我這么做:
1、在主進程執行,調用一個進程執行函數,然後主進程sleep,等時間到了,就kill 執行函數的進程。
測試一個例子:

[python] view plain
import time
import threading

def p(i):
print i

class task(threading.Thread):
def __init__(self,fun,i):
threading.Thread.__init__(self)
self.fun = fun
self.i = i
self.thread_stop = False

def run(self):
while not self.thread_stop:
self.fun(self.i)

def stop(self):
self.thread_stop = True

def test():
thread1 = task(p,2)
thread1.start()
time.sleep(4)
thread1.stop()

❹ python 函數後加大括弧啥意思

existKill函數會返回一個可迭代對象,後面的帶數字中括弧是對其內部元素的引用

❺ 退出python環境應該輸入什麼

❻ 在python tkinter中用什麼函數可以關掉一個窗口

好象調用一次主窗口的close似乎就可以。或者是app的close, 或者是destroy或者是terminate,不記得是哪個函數了。

當然你殺掉自己也是可以的。 用kill。 或者是sys.exit也應該可以。

❼ python問題 我想保護一個進程讓psutil庫中的kill方法不能kill這個進程,求解答

kill通常是通過發送信號結束進程的,對psutil不太熟悉,你可以看看他的源碼看看發送的是什麼信號,然後你在python里對那些信號做處理就好了

❽ python哪個函數啟動進程和關閉進程

任何一種編程語言,啟動進程和關閉進程都是跟操作系統相關的操作,python中與操作系統打交道的話,推薦使用os模塊。

os.system() 函數可以啟動一個進程,執行完之後返回狀態碼。

os.fork() 復制一個進程,如果是子進程返回0,如果是父進程返回子進程的pid,使用這個函數的時候,建議你學習一下linux編程的知識。
os.popen 以管道的方式創建進程。
os.spawnl 也可以創建進程,並能指定環境變數。

os.kill(pid, sig) 關閉一個進程,pid是進程號,sig是信號。與fork配合使用,例如你剛才用fork創建了一個子進程,它的pid是11990, 那麼調用
os.kill( 11990, signal.CTRL_BREAK_EVENT)
就以ctrl+c的方式殺死了這個進程。

另外還有一個模塊multiprocessing,這個模塊封裝了很多創建進程和進程間通信的操作,可以讓你發揮多核的威力。

❾ 如何使用python處理心音信號

在了解了Linux的信號基礎之 後,Python標准庫中的signal包就很容易學習和理解。signal包負責在Python程序內部處理信號,典型的操作包括預設信號處理函數,暫 停並等待信號,以及定時發出SIGALRM等。要注意,signal包主要是針對UNIX平台(比如Linux, MAC OS),而Windows內核中由於對信號機制的支持不充分,所以在Windows上的Python不能發揮信號系統的功能。
信號(signal)-- 進程之間通訊的方式,是一種軟體中斷。一個進程一旦接收到信號就會打斷原來的程序執行流程來處理信號。
定義信號名
signal包定義了各個信號名及其對應的整數,比如:
import signal
print(signal.SIGABRT)
print(signal.SIG_DFL)

Python所用的信號名與Linux一致,可以通過$ man 7 signal 查詢
預設信號處理函數
signal包的核心是使用signal.signal()函數來預設(register)信號處理函數,如下所示:
singnal.signal(signalnum, handler)
signalnum為某個信號,handler為該信號的處理函數。我們在信號基礎里提到,進程可以無視信號,可以採取默認操作,還可以自定義操作。當handler為signal.SIG_IGN時,信號被無視(ignore)。當handler為singal.SIG_DFL,進程採取默認操作(default)。當handler為一個函數名時,進程採取函數中定義的操作。

import signal
# Define signal handler function
def myHandler(signum, frame):
print('I received: ', signum)

# register signal.SIGTSTP's handler
signal.signal(signal.SIGTSTP, myHandler)
signal.pause()
print('End of Signal Demo')
# 有問題待測試

在主程序中,我們首先使用signal.signal()函數來預設信號處理函數。然後我們執行signal.pause()來讓該進程暫停以等待信號, 以等待信號。當信號SIGUSR1被傳遞給該進程時,進程從暫停中恢復,並根據預設,執行SIGTSTP的信號處理函數myHandler()。 myHandler的兩個參數一個用來識別信號(signum),另一個用來獲得信號發生時,進程棧的狀況(stack frame)。這兩個參數都是由signal.singnal()函數來傳遞的。
上面的程序可以保存在一個文件中(比如test.py)。我們使用如下方法運行:
$python test.py
以便讓進程運行。當程序運行到signal.pause()的時候,進程暫停並等待信號。此時,通過按下CTRL+Z向該進程發送SIGTSTP信號。我們可以看到,進程執行了myHandle()函數, 隨後返回主程序,繼續執行。(當然,也可以用$ps查詢process ID, 再使用$kill來發出信號。)
(進程並不一定要使用signal.pause()暫停以等待信號,它也可以在進行工作中接受信號,比如將上面的signal.pause()改為一個需要長時間工作的循環。)
我們可以根據自己的需要更改myHandler()中的操作,以針對不同的信號實現個性化的處理。
定時發出SIGALRM信號
一個有用的函數是signal.alarm(),它被用於在一定時間之後,向進程自身發送SIGALRM信號:

import signal
# Define signal handler function
def myHandler(signum, frame):
print("Now, it's the time")
exit()

# register signal.SIGALRM's handler
signal.signal(signal.SIGALRM, myHandler)
signal.alarm(5)
while True:
print('not yet')

我們這里用了一個無限循環以便讓進程持續運行。在signal.alarm()執行5秒之後,進程將向自己發出SIGALRM信號,隨後,信號處理函數myHandler開始執行。
發送信號
signal包的核心是設置信號處理函數。除了signal.alarm()向自身發送信號之外,並沒有其他發送信號的功能。但在os包中,有類似於linux的kill命令的函數,分別為
os.kill(pid, sid)
os.killpg(pgid, sid)
分別向進程和進程組(見Linux進程關系)發送信號。sid為信號所對應的整數或者singal.SIG*。

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

閱讀全文

與kill函數在python相關的資料

熱點內容
管道彎頭製作演算法 瀏覽:37
phpmvcsmarty實例 瀏覽:925
spring搭建http伺服器地址 瀏覽:713
servlet教程pdf 瀏覽:970
蜂鳥眾包app如何聯系客服 瀏覽:188
程序員t恤淘寶 瀏覽:94
自助研發app如何推廣 瀏覽:727
國家反詐app在哪裡下 瀏覽:947
如何在晉江文學城添加密保 瀏覽:341
linux父進程kill 瀏覽:871
設備樹文件反編譯 瀏覽:501
小米照片的文件夾叫什麼 瀏覽:294
怎樣查程序員轉獵頭 瀏覽:674
吉林小說網綜排行榜少年巨 瀏覽:182
dns測試命令是 瀏覽:750
手機文件雙重解壓 瀏覽:481
linux查看tomcat線程 瀏覽:153
51單片機晶振電容 瀏覽:636
編譯器錯誤的位置怎麼找到 瀏覽:434
編譯原理操作系統圖形學 瀏覽:843