當前位置:首頁 » 編程語言 » python獲取進程

python獲取進程

發布時間: 2022-08-16 19:51:15

python使用標准庫根據進程名如何獲取進程的

在Python中,我們通過標准庫中的subprocess包來fork一個子進程,並運行一個外部的程序。
使用subprocess包中的函數創建子進程的時候,要注意:
1) 在創建子進程之後,父進程是否暫停,並等待子進程運行。
2) 函數返回什麼
3) 當returncode不為0時,父進程如何處理。

⑵ python如何獲取進程和線程狀態

threading.active_count()
Return the number of Thread objects currently alive. The returned count is equal to the length of the list returned by enumerate().
active_count可以返回當前活動的線程枚舉
我一般是這么用的

def getHeatsParallel(self): threads = [] for i in range(0, self.threadCount): t = threading.Thread(target=self.SomeFunction, name=str(i)) threads.append(t) t.start() for t in threads: t.join()

⑶ python中怎麼根據進程號獲取進程名

安裝第三方庫

pipinstallpsutil

使用如下,假設進程號為3213

importpsutil
proc=psutil.Process(pid=3213)
printproce.name()

⑷ python根據進程pid獲取進程cpu等信息時出錯

(x):
p=psutil.get_process_list()
forrinp:
aa=str(r)
f=re.compile(x,re.I)
iff.search(aa):
#printaa.split('pid=')[1].split(',')[0]
printaa.split('pid=')processinfo(sys.argv[1])

⑸ 怎樣使用python查詢系統某一進程是否存在

只需要一小段python代碼,就可以解決用python查詢判斷系統進程是否存在的操作。具休是怎麼樣判斷進程是不是存在,看下邊的python代碼就會明白了。
正常我們在編寫python代碼時,要殺死一個進程之前,一定要做的事情就是要知道這個進程是不是存在,存在要怎麼樣操作、不存在又怎麼樣操作。如何查找一個進程是否存在,用Python代碼來判斷一下最好不過了。
如何用python代碼查找一個進程是否存在的源代碼如下:
?

12345678910111213141516171819
#-*- coding:utf-8 -*-#編碼聲明 import win32com.client#導入方法 def check_exsit(process_name): WMI = win32com.client.GetObject('winmgmts:') processCodeCov = WMI.ExecQuery('select * from Win32_Process where Name="%s"' % process_name) if len(processCodeCov) > 0:#判斷操作 www.iplaypy.com print '%s is exists' % process_name else: print '%s is not exists' % process_name if __name__ == '__main__': check_exsit('chrome.exe')

⑹ python怎麼獲得進程的pid

#-*-encoding:UTF-8-*-
importos
importsys
importstring
importpsutil
importre

defget_pid(name):
process_list=psutil.get_process_list()
regex="pid=(d+),sname='"+name+"'"
printregex
pid=0
forlineinprocess_list:
process_info=str(line)
ini_regex=re.compile(regex)
result=ini_regex.search(process_info)
ifresult!=None:
pid=string.atoi(result.group(1))
printresult.group()
break
defmain(argv):<br>name=argv[1]<br>get_pid(name)

if__name__=="__main__":
main(sys.argv)

⑺ python腳本怎麼獲取遠程linux伺服器的進程名

進程信息
/proc目錄包含了所有正運行的進程目錄。這些目錄的名字和進程的標識符是一樣的。所以,如果你遍歷/proc目錄下那些使用數字作為它們的名字的目錄,你就會獲得所有現在正在運行的進程列表。在下面的代碼中process_list()函數返回所有現在正在運行的進程的標識符列表。當你執行這個程序後,這個列表的長度就是在系統上運行的總進程數。

復制代碼 代碼如下:

#!/usr/bin/env python
"""
List of all process IDs currently active
"""
from __future__ import print_function
import os
def process_list():
pids = []
for subdir in os.listdir('/proc'):
if subdir.isdigit():
pids.append(subdir)
return pids

if __name__=='__main__':
pids = process_list()
print('Total number of running processes:: {0}'.format(len(pids)))

上面的程序當執行後會顯示和下面類似的輸出:

復制代碼 代碼如下:
Total number of running processes:: 229

每個進程目錄包含了一些其他文件和目錄,如進程命令的調用,它正使用的共享庫以及其它的。
建議看看《Linux就該這么學》這本書

⑻ python怎麼獲取軟體進程並執行

你是ssh遠程執行嗎?本機的話不應該這樣啊是不是你中間的代碼出現異常了

⑼ python 獲取指定進程pid,怎麼總是錯

簡答:
通過知道對應的進程名,可以獲得進程,然後進一步獲取進程信息。

詳解,自己去看吧:
【記錄】折騰Python中的psutil:一個用於獲得處理器和系統相關信息的模塊
(此處不能貼地址,請自己用google搜標題,即可找到帖子地址)

⑽ python怎麼實現一個進程

想要充分利用多核CPU資源,Python中大部分情況下都需要使用多進程,Python中提供了multiprocessing這個包實現多進程。multiprocessing支持子進程、進程間的同步與通信,提供了Process、Queue、Pipe、Lock等組件。

開辟子進程

multiprocessing中提供了Process類來生成進程實例

Process([group [, target [, name [, args [, kwargs]]]]])1

  • group分組,實際上不使用

  • target表示調用對象,你可以傳入方法的名字

  • args表示給調用對象以元組的形式提供參數,比如target是函數a,他有兩個參數m,n,那麼該參數為args=(m, n)即可

  • kwargs表示調用對象的字典

  • name是別名,相當於給這個進程取一個名字

  • 先來個小例子:

  • # -*- coding:utf-8 -*-from multiprocessing import Process, Poolimport osimport timedef run_proc(wTime):

  • n = 0

  • while n < 3: print "subProcess %s run," % os.getpid(), "{0}".format(time.ctime()) #獲取當前進程號和正在運行是的時間

  • time.sleep(wTime) #等待(休眠)

  • n += 1if __name__ == "__main__":

  • p = Process(target=run_proc, args=(2,)) #申請子進程

  • p.start() #運行進程

  • print "Parent process run. subProcess is ", p.pid print "Parent process end,{0}".format(time.ctime())12345678910111213141516171819

  • 運行結果:

    Parent process run. subProcess is 30196
    Parent process end,Mon Mar 27 11:20:21 2017
    subProcess 30196 run, Mon Mar 27 11:20:21 2017
    subProcess 30196 run, Mon Mar 27 11:20:23 2017
    subProcess 30196 run, Mon Mar 27 11:20:25 2017

    根據運行結果可知,父進程運行結束後子進程仍然還在運行,這可能造成僵屍( zombie)進程。

    通常情況下,當子進程終結時,它會通知父進程,清空自己所佔據的內存,並在內核里留下自己的退出信息。父進程在得知子進程終結時,會從內核中取出子進程的退出信息。但是,如果父進程早於子進程終結,這可能造成子進程的退出信息滯留在內核中,子進程成為僵屍(zombie)進程。當大量僵屍進程積累時,內存空間會被擠占。

    有什麼辦法可以避免僵屍進程呢?
    這里介紹進程的一個屬性 deamon,當其值為TRUE時,其父進程結束,該進程也直接終止運行(即使還沒運行完)。
    所以給上面的程序加上p.deamon = true,看看效果。

  • # -*- coding:utf-8 -*-from multiprocessing import Process, Poolimport osimport timedef run_proc(wTime):

  • n = 0

  • while n < 3: print "subProcess %s run," % os.getpid(), "{0}".format(time.ctime())

  • time.sleep(wTime)

  • n += 1if __name__ == "__main__":

  • p = Process(target=run_proc, args=(2,))

  • p.daemon = True #加入daemon

  • p.start() print "Parent process run. subProcess is ", p.pid print "Parent process end,{0}".format(time.ctime())

  • 執行結果:

    Parent process run. subProcess is 31856
    Parent process end,Mon Mar 27 11:40:10 2017

    這是問題又來了,子進程並沒有執行完,這不是所期望的結果。有沒辦法將子進程執行完後才讓父進程結束呢?
    這里引入p.join()方法,它使子進程執行結束後,父進程才執行之後的代碼

  • # -*- coding:utf-8 -*-from multiprocessing import Process, Poolimport osimport timedef run_proc(wTime):

  • n = 0

  • while n < 3: print "subProcess %s run," % os.getpid(), "{0}".format(time.ctime())

  • time.sleep(wTime)

  • n += 1if __name__ == "__main__":

  • p = Process(target=run_proc, args=(2,))

  • p.daemon = True

  • p.start()

  • p.join() #加入join方法

  • print "Parent process run. subProcess is ", p.pid print "Parent process end,{0}".format(time.ctime())21

  • 執行結果:

    subProcess 32076 run, Mon Mar 27 11:46:07 2017
    subProcess 32076 run, Mon Mar 27 11:46:09 2017
    subProcess 32076 run, Mon Mar 27 11:46:11 2017
    Parent process run. subProcess is 32076
    Parent process end,Mon Mar 27 11:46:13 2017

    這樣所有的進程就能順利的執行了。

    將進程定義成類

    通過繼承Process類,來自定義進程類,實現run方法。實例p通過調用p.start()時自動調用run方法。
    如下:

  • # -*- coding:utf-8 -*-from multiprocessing import Process, Poolimport osimport timeclass Myprocess(Process):


  • def __init__(self, wTime):

  • Process.__init__(self)

  • self.wTime = wTime def run(self):

  • n = 0

  • while n < 3: print "subProcess %s run," % os.getpid(), "{0}".format(time.ctime())

  • time.sleep(self.wTime)

  • n += 1if __name__ == "__main__":

  • p = Myprocess(2)

  • p.daemon = True

  • p.start() #自動調用run方法

  • p.join() print "Parent process run. subProcess is ", p.pid print "Parent process end,{0}".format(time.ctime())2122232425262728

  • 執行結果和上一個例子相同。

    創建多個進程

    很多時候系統都需要創建多個進程以提高CPU的利用率,當數量較少時,可以手動生成一個個Process實例。當進程數量很多時,或許可以利用循環,但是這需要程序員手動管理系統中並發進程的數量,有時會很麻煩。這時進程池Pool就可以發揮其功效了。可以通過傳遞參數限制並發進程的數量,默認值為CPU的核數。
    直接上例子:

  • # -*- coding:utf-8 -*-from multiprocessing import Process,Poolimport os,timedef run_proc(name): ##定義一個函數用於進程調用

  • for i in range(5):

  • time.sleep(0.2) #休眠0.2秒

  • print 'Run child process %s (%s)' % (name, os.getpid())#執行一次該函數共需1秒的時間if __name__ =='__main__': #執行主進程

  • print 'Run the main process (%s).' % (os.getpid())

  • mainStart = time.time() #記錄主進程開始的時間

  • p = Pool(8) #開辟進程池

  • for i in range(16): #開辟14個進程

  • p.apply_async(run_proc,args=('Process'+str(i),))#每個進程都調用run_proc函數,

  • #args表示給該函數傳遞的參數。


  • print 'Waiting for all subprocesses done ...'

  • p.close() #關閉進程池

  • p.join() #等待開辟的所有進程執行完後,主進程才繼續往下執行

  • print 'All subprocesses done'

  • mainEnd = time.time() #記錄主進程結束時間

  • print 'All process ran %0.2f seconds.' % (mainEnd-mainStart) #主進程執行時間21222324

  • 執行結果:
    開頭部分

    Run the main process (30920).
    Waiting for all subprocesses done …
    Run child process Process0 (32396)
    Run child process Process3 (25392)
    Run child process Process1 (28732)
    Run child process Process2 (32436)

    末尾部分:

    Run child process Process15 (25880)
    All subprocesses done
    All process last 2.49 seconds.

    相關說明:

    這里進程池對並發進程的限制數量為8個,而程序運行時會產生16個進程,進程池將自動管理系統內進程的並發數量,其餘進程將會在隊列中等待。限制並發數量是因為,系統中並發的進程不是越多越好,並發進程太多,可能使CPU大部分的時間用於進程調度,而不是執行有效的計算。

    採用多進程並發技術時,就單個處理機而言,其對進程的執行是串列的。但具體某個時刻哪個進程獲得CPU資源而執行是不可預知的(如執行結果的開頭部分,各進程的執行順序不定),這就體現了進程的非同步性。

    如果單個程序執行14次run_proc函數,那麼它會需要至少16秒,通過進程的並發,這里只需要2.49秒,可見並發的優勢。

熱點內容
看linux版本 發布:2025-01-20 04:40:37 瀏覽:19
php獲取調用的方法 發布:2025-01-20 04:25:45 瀏覽:458
SMPT郵箱伺服器地址 發布:2025-01-20 04:04:16 瀏覽:662
抖影工廠為什麼安卓手機用不了 發布:2025-01-20 04:00:05 瀏覽:386
我的世界網易版怎麼進朋友伺服器 發布:2025-01-20 03:50:10 瀏覽:684
phpsession跳轉頁面跳轉 發布:2025-01-20 03:47:20 瀏覽:540
深圳解壓工廠 發布:2025-01-20 03:41:44 瀏覽:690
linux字體查看 發布:2025-01-20 03:41:30 瀏覽:742
pythonextendor 發布:2025-01-20 03:40:11 瀏覽:199
為什麼安卓手機儲存越來越少 發布:2025-01-20 03:40:07 瀏覽:925