2010-11-15 24 views
24

Esto debería ser simple, pero simplemente no lo estoy viendo.Obtener nombre del proceso por PID

Si tengo una ID de proceso, ¿cómo puedo usar eso para obtener información sobre el proceso, como el nombre del proceso?

+0

posible duplicado de [¿Cómo se obtiene el identificador de proceso de un programa en Python?] (Http://stackoverflow.com/questions/3761639/how-do-you-get -the-process-id-of-a-program-in-python) –

+2

@PeterO. Esa pregunta es ** ** inversa de esta. –

Respuesta

20

En Linux, puede leer el sistema de archivos proc. El archivo /proc/<pid>/cmdline contiene la línea de comandos.

+6

Una alternativa es 'ps -o cmd = '. –

+7

Y '/ proc//comm' en realidad da el nombre del proceso. –

13

Try PSUtil ->https://github.com/giampaolo/psutil

funciona bien en Windows y Unix, recuerdo.

+0

Parece lo correcto. Sin embargo, me molesta que no esté en Debian 5. – andyortlieb

+2

Ese es un problema (común) con debian, no con psutil;) –

+1

puede simplemente "instalar python setup.py" para instalarlo desde las fuentes. –

1

Para Windows

una manera de conseguir todos los PIDs de los programas en su ordenador sin necesidad de descargar módulos:

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) 

si sólo quería un programa o todos los programas con el mismo nombre y que quería para matar el proceso o algo:

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) 

eso fue sólo una pasta de mi programa de matar el proceso que podría hacerlo mucho mejor, pero está bien.

0

Prueba este

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 
Cuestiones relacionadas