web-dev-qa-db-fra.com

Obtenir le nom du processus par PID

Cela devrait être simple, mais je ne le vois tout simplement pas.

Si j'ai un ID de processus, comment puis-je l'utiliser pour récupérer des informations sur le processus, telles que le nom du processus.

24
andyortlieb

Sous Linux, vous pouvez lire le système de fichiers proc. Le fichier /proc/<pid>/cmdline contient la ligne de commande.

20
Juho Östman

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

Fonctionne bien sous Windows et Unix, je me souviens.

14
slezica

Pour les fenêtres

Une façon d'obtenir toutes les informations sur les programmes sur votre ordinateur sans télécharger de module:

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 vous vouliez seulement un programme ou tous les programmes du même nom et que vous vouliez arrêter le processus ou quelque chose du genre:

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)

C’était juste une pâte de mon programme de suppression de processus, je pouvais le rendre beaucoup mieux, mais c’est correct.

1
user3818650

En utilisant psutil, voici le code le plus simple que je puisse vous donner:

import psutil

# The PID ID of the process needed
pid_id = 1216

# Informations of the Process with the PID ID
process_pid = psutil.Process(pid_id)
print(process_pid)
# Gives You PID ID, name and started date
# psutil.Process(pid=1216, name='ATKOSD2.exe', started='21:38:05')

# Name of the process
process_name = process_pid.name()
1
KBill

Essaye ça

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
0
Neil McGill