PID

2010-11-15 15 views
24

ile işlem adını alın Bu basit olmalı, ancak göremiyorum.PID

İşlem kimliğim varsa, işlem adı gibi işlem hakkında bilgi almak için bunu nasıl kullanabilirim.

+0

olası yinelenen deneyin [size Python programın işlem kimliği nasıl alabilirim?] (Http://stackoverflow.com/questions/3761639/how-do-you-get -Program-içinde-program-içinde-program- –

+2

@PeterO. Bu soru, bunun ** tersi ** dir. –

cevap

20

Linux altında proc dosya sistemini okuyabilirsiniz. Dosya /proc/<pid>/cmdline komut satırı içerir. Sadece tek bir program veya aynı adı taşıyan tüm programları istedik ve isteseydim

import os 

pids = [] 
a = os.popen("tasklist").readlines() 
for x in a: 
     try: 
     pids.append(int(x[29:34])) 
     except: 
      pass 
for each in pids: 
     print(each) 

: Windows'un

A Way herhangi modülleri indirmeden bilgisayarınızdaki programların tümünü pids almak için

+6

Bir alternatif 'ps -o cmd = '. –

+7

Ve '/ proc//comm' aslında işlem adını verir. –

13

deneyin psutil - Windows ve Unix üzerinde>https://github.com/giampaolo/psutil

İşleri ince, Hatırladığım.

+0

Yapılması gereken doğru şey gibi görünüyor. Bununla birlikte, debian 5'de olmamasına rağmen beni rahatsız ediyor. – andyortlieb

+2

Bu, debian ile (yaygın) bir sorun değil, psutil ile değil;) –

+1

kaynaklardan yüklemek için sadece "python setup.py install" komutunu kullanabilirsiniz. –

1

süreci falan öldürmek: benim yöntemim öldürmek programının sadece bir hamur oldu

import os, sys, win32api 

tasklistrl = os.popen("tasklist").readlines() 
tasklistr = os.popen("tasklist").read() 

print(tasklistr) 

def kill(process): 
    process_exists_forsure = False 
    gotpid = False 
    for examine in tasklistrl: 
      if process == examine[0:len(process)]: 
       process_exists_forsure = True 
    if process_exists_forsure: 
     print("That process exists.") 
    else: 
     print("That process does not exist.") 
     raw_input() 
     sys.exit() 
    for getpid in tasklistrl: 
     if process == getpid[0:len(process)]: 
       pid = int(getpid[29:34]) 
       gotpid = True 
       try: 
        handle = win32api.OpenProcess(1, False, pid) 
        win32api.TerminateProcess(handle, 0) 
        win32api.CloseHandle(handle) 
        print("Successfully killed process %s on pid %d." % (getpid[0:len(prompt)], pid)) 
       except win32api.error as err: 
        print(err) 
        raw_input() 
        sys.exit() 
    if not gotpid: 
     print("Could not get process pid.") 
     raw_input() 
     sys.exit() 

    raw_input() 
    sys.exit() 

prompt = raw_input("Which process would you like to kill? ") 
kill(prompt) 

daha iyi bir sürü yapabiliriz ama iyidir.

0

bu

def filter_non_printable(str): 
    ret="" 
    for c in str: 
     if ord(c) > 31 or ord(c) == 9: 
      ret += c 
     else: 
      ret += " " 
    return ret 

# 
# Get /proc/<cpu>/cmdline information 
# 
def pid_name(self, pid): 
    try: 
     with open(os.path.join('/proc/', pid, 'cmdline'), 'r') as pidfile: 
      return filter_non_printable(pidfile.readline()) 

    except Exception: 
     pass 
     return 
İlgili konular