當前位置:首頁 » 編程語言 » pythonoskill

pythonoskill

發布時間: 2023-06-26 13:55:13

python os.fock 創建的子進程里如果是個死循環,怎麼強制結束進程

os.fork()正常返回創建的子進程id,可以使用

os.kill(pid,sig)

殺死子進程。

⑵ 怎樣用python控制關閉一個.exe的程序

#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
@Date:
@author
"""
__author__ = 'Sla'
__version__ = '1.0.0'

import pprint

import os
import time
import subprocess

def processkill():
_p = subprocess.Popen("C:\WINDOWS\system32\cmd.exe")
_pid = _p.pid
print "sub pid:", _pid

while _p.poll() == None:
time.sleep( 5 )
#kill subprocess after 5 seconds, if it is not done
if _p.poll() == None:
print "\nKill the subprocess\n"
if os.name == 'nt':
os.system('taskkill /PID %s /T /F' % _pid)
else:
os.system('kill %s' % _pid)
break
else:
if _p.returncode != 0:
print "\nsubprocess run Error"
else:
print "\nsubprocess run OK"

if __name__ == '__main__':
processkill()
——————————————————————————————————————
你可以測試一下,在5秒內打出exit就成功運行,不然就結束cmd進程

⑶ python調用OS.system結束進程問題

os.system是執行命令,是否列印取決於命令是否有返回
如果你想不讓其列印 可以在命令中做手腳如: os.system('taskkill /IM dllhost.exe > NUL')

⑷ ubuntu|linux下 如何用python 模擬按鍵

ubuntu下,也就是linux下,通常會用kill -事件編號實現。 你查一下LINUX下的事件就明白了。


kill 進程號 實現上是發了一個信號給指定的進程。 在python里,也可以載入事件處理模塊,處理來自其它程序發過來的信號, 當然你可以用KILL工具發信號過來。


ctrl+d也是一個信號,ctrl+c也是一個。具體信號編碼我不記得了。不過以前我做多進程管理時就是使用這個方法。 好象信號還可以帶參數過來。


你打開python的幫助。看看signal這個模塊。我把它的例子拿過來。對你有用不

importsignal,os
defhandler(signum,frame):
print'Signalhandlercalledwithsignal',signum
raiseIOError("Couldn'topendevice!")

#Setthesignalhandleranda5-secondalarm
signal.signal(signal.SIGALRM,handler)
signal.alarm(5)

#Thisopen()mayhangindefinitely
fd=os.open('/dev/ttyS0',os.O_RDWR)

signal.alarm(0)#Disablethealarm

下面是我找到的一些資料。也許有用。


信號的概念

信號(signal)--進程之間通訊的方式,是一種軟體中斷。一個進程一旦接收到信號就會打斷原來的程序執行流程來處理信號。

幾個常用信號:

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

SIGTERM終止進程軟體終止信號

SIGKILL終止進程殺死進程

SIGALRM鬧鍾信號

進程結束信號SIGTERM和SIGKILL的區別

SIGTERM比較友好,進程能捕捉這個信號,根據您的需要來關閉程序。在關閉程序之前,您可以結束打開的記錄文件和完成正在做的任務。在某些情況下,假如進程正在進行作業而且不能中斷,那麼進程可以忽略這個SIGTERM信號。

對於SIGKILL信號,進程是不能忽略的。這是一個「我不管您在做什麼,立刻停止」的信號。假如您發送SIGKILL信號給進程,Linux就將進程停止在那裡。

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

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

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

linux操作系統提供的信號

[100003@oss235 myppt]$ kill -l

1) SIGHUP2) SIGINT3) SIGQUIT4) SIGILL

5) SIGTRAP6) SIGABRT7) SIGBUS8) SIGFPE

9) SIGKILL10) SIGUSR111) SIGSEGV12) SIGUSR2

13) SIGPIPE14) SIGALRM15) SIGTERM16) SIGSTKFLT

17) SIGCHLD18) SIGCONT19) SIGSTOP20) SIGTSTP

21) SIGTTIN22) SIGTTOU23) SIGURG24) SIGXCPU

25) SIGXFSZ26) SIGVTALRM27) SIGPROF28) SIGWINCH

29) SIGIO30) SIGPWR31) SIGSYS34) SIGRTMIN

35) SIGRTMIN+136) SIGRTMIN+237) SIGRTMIN+338) SIGRTMIN+4

39) SIGRTMIN+540) SIGRTMIN+641) SIGRTMIN+742) SIGRTMIN+8

43) SIGRTMIN+944) 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-956) SIGRTMAX-857) SIGRTMAX-758) SIGRTMAX-6

59) SIGRTMAX-560) SIGRTMAX-461) SIGRTMAX-362) SIGRTMAX-2

63) SIGRTMAX-164) SIGRTMAX

Python提供的信號

Python 2.4.3 (#1, Jun 11 2009, 14:09:58)

[GCC 4.1.2 20080704 (Red Hat 4.1.2-44)] on linux2

Type "help", "right", "credits" or "license" for more information.

>>> import signal

>>> dir(signal)

['NSIG', 'SIGABRT', 'SIGALRM', 'SIGBUS', 'SIGCHLD', 'SIGCLD',
'SIGCONT', 'SIGFPE', 'SIGHUP', 'SIGILL', 'SIGINT', 'SIGIO', 'SIGIOT',
'SIGKILL', 'SIGPIPE', 'SIGPOLL', 'SIGPROF', 'SIGPWR', 'SIGQUIT',
'SIGRTMAX', 'SIGRTMIN', 'SIGSEGV', 'SIGSTOP', 'SIGSYS', 'SIGTERM',
'SIGTRAP', 'SIGTSTP', 'SIGTTIN', 'SIGTTOU', 'SIGURG', 'SIGUSR1',
'SIGUSR2', 'SIGVTALRM', 'SIGWINCH', 'SIGXCPU', 'SIGXFSZ', 'SIG_DFL',
'SIG_IGN', '__doc__', '__name__', 'alarm', 'default_int_handler',
'getsignal', 'pause', 'signal']

操作系統規定了進程收到信號以後的默認行為

但是,我們可以通過綁定信號處理函數來修改進程收到信號以後的行為

有兩個信號是不可更改的SIGTOP和SIGKILL

綁定信號處理函數

import os
import signal
from time import sleep

def onsignal_term(a,b):
print '收到SIGTERM信號'

#這里是綁定信號處理函數,將SIGTERM綁定在函數onsignal_term上面
signal.signal(signal.SIGTERM,onsignal_term)

def onsignal_usr1(a,b):
print '收到SIGUSR1信號'
#這里是綁定信號處理函數,將SIGUSR1綁定在函數onsignal_term上面
signal.signal(signal.SIGUSR1,onsignal_usr1)

while 1:
print '我的進程id是',os.getpid()
sleep(10)


運行該程序。然後通過另外一個進程來發送信號。

發送信號

發送信號的代碼如下:

import os
import signal

#發送信號,16175是前面那個綁定信號處理函數的pid,需要自行修改
os.kill(16175,signal.SIGTERM)
#發送信號,16175是前面那個綁定信號處理函數的pid,需要自行修改
os.kill(16175,signal.SIGUSR1)

⑸ python如何在子線程中關閉主進程

線程中使用

os._exit()

即可讓線程停止整個進程

⑹ python 中os.system() 調用命令超時後,如何停止

可以考慮改用 subprocess 這個庫來實現
比如
p = subprocess.Popen([『your command』, 'params and options'])
try:
p.wait(my_timeout)
except subp.TimeoutExpired:
p.kill()

⑺ python如何終止os.system調用的程序

建議用subprocess
因為如果你的程序不會自動停止,那麼用os.system(cmd),cmd會一直持續運行知道調用的程序返回結果。
subprocess可以開啟一個子線程,在子線程裡面調用,在你需要的時候就可以把這個子線程關掉,這樣代碼也更靈活
例如:
p = subprocess.Popen("your command")
#todo
#anything you want
time.sleep(10)
p.kill()
這段代碼就是在"your command"運行10秒以後,把它殺掉

⑻ python殺死子進程後繼續執行後面程序

os.system的返回值是運行結果,用p命名沒什麼意義,建議用Popen比較好控制,例如

importsubprocess
a=subprocess.Popen('dir',shell=True)
然後就可以用a.kill()來殺進程

⑼ python里如何終止線程 比如線程里調用os.system('adb logcat')這個是不會停止的

如果直接終止線程不清楚,要不曲線下,新開啟一個進程,再得到這個進程id,然後幹掉這個進程
import
multiprocessing
def
NewProcess():
global
id
id=os.getpid()
os.system('adb
logcat')
NP=multiporcess.Process(target=one
function,args=())
NP.start()
os.kill(id,9)

熱點內容
壓縮機消音罩 發布:2025-02-12 02:37:41 瀏覽:528
javawsdl2java 發布:2025-02-12 02:25:21 瀏覽:366
java默認許可權 發布:2025-02-12 02:25:20 瀏覽:655
演算法預測用戶 發布:2025-02-12 02:24:44 瀏覽:390
舊電腦搭建網路列印伺服器 發布:2025-02-12 02:09:45 瀏覽:648
c語言順序表基本操作 發布:2025-02-12 02:09:41 瀏覽:887
安卓光遇怎麼開三檔畫質華為 發布:2025-02-12 01:55:51 瀏覽:193
微信哪裡能找到登陸游戲的密碼 發布:2025-02-12 01:54:22 瀏覽:591
php獲取伺服器ip地址 發布:2025-02-12 01:54:12 瀏覽:578
對象存儲和nas哪個好 發布:2025-02-12 01:50:34 瀏覽:445