Wie bekomme ich einen Prozessnamen von seiner PID? Zum Beispiel führe ich cat file1.txt aus, aber ich möchte diesen cat-Befehl und seine Argumente herausfinden, da seine PID im System vorhanden ist. Gibt es eine Struktur, um es zu bestimmen oder ähnliches? Irgendeine Idee?
Prozessname von seiner PID in Linux
Es gibt keinen allgemeinen Weg, dies unter Unix zu tun.
Jedes Betriebssystem hat unterschiedliche Möglichkeiten, damit umzugehen, und einige sind sehr schwierig. Sie erwähnen jedoch Linux. Bei Linux befinden sich die Informationen im /proc-Dateisystem.
Lesen Sie die Datei, um die Befehlszeile für die Prozess-ID 9999 abzurufen /proc/9999/cmdline
.
-
Und um den Prozessnamen für die Prozess-ID 9999 zu erhalten, lesen Sie die Datei
/proc/9999/comm
.– Skippy le Grand Gourou
5. Juli 2013 um 15:02 Uhr
-
Die Frage war, wie man den Prozessnamen erhält, nicht die Befehlszeile. Auf meinem SUSE gebe ich ‘head /proc/9999/cmdline’ für einen kwrite-Prozess ein und er gibt zurück: ‘kdeinit4: kwrite [kdeinit]’. Wenn ich /comm anstelle von /cmdline verwende, erhalte ich das richtige Ergebnis: ‘kwrite’.
– Elmue
21. April 2015 um 11:01 Uhr
-
/proc/$pid/comm
schneidet die Ausgabe auf 15 Zeichen, wie es scheint. Das ist sehr … sehr schlecht …– Gläubiger
1. Juni 2021 um 3:58 Uhr
Unter Linux kannst du reinschauen /proc/
. Versuchen Sie es mit der Eingabe man proc
für mehr Informationen. Die Inhalte von /proc/$PID/cmdline
gibt Ihnen die Befehlszeile diesen Prozess $PID
mit gefahren wurde. Es gibt auch /proc/self
zum selbst testen 🙂
Eine Alternative (zB unter Mac OS X) ist zu verwenden libproc
. Sehen libproc.h.
-
Können Sie mir bitte den Unterschied zwischen Ihrer und meiner Antwort sagen? 🙂
– Anubhab
21. März 2013 um 11:02 Uhr
-
Deine Antwort war nicht da, als ich anfing, meine zu schreiben 🙂
– robbie_c
21. März 2013 um 11:02 Uhr
POSIX C unterstützt KEINE Standard-API zum Abrufen des Prozessnamens nach PID.
Unter Linux können Sie den Namen über die LINUX Proc API erhalten: /proc/$PID/cmdline. Und der Code sieht so aus:
const char* get_process_name_by_pid(const int pid)
{
char* name = (char*)calloc(1024,sizeof(char));
if(name){
sprintf(name, "/proc/%d/cmdline",pid);
FILE* f = fopen(name,"r");
if(f){
size_t size;
size = fread(name, sizeof(char), 1024, f);
if(size>0){
if('\n'==name[size-1])
name[size-1]='\0';
}
fclose(f);
}
}
return name;
}
-
Und wenn Sie hierher gekommen sind, um nach einer Lösung in C# zu suchen, die mit Mono funktioniert, dann schauen Sie sich diese an: stackoverflow.com/questions/29827331/…
– Elmue
23. April 2015 um 15:32 Uhr
Um den Prozessnamen einer Prozess-ID zu erhalten, sagen wir 9000, verwenden Sie diesen Befehl:
ps -p 9000 -o comm=
toddwz
Während diese Frage beantwortet wurde, möchte ich meine 2 Cent hinzufügen.
In meinem Fall beim Prozess 1111
Prozess erstellt 22222
über pipe
(zumindest habe ich das gehört), /proc/2222/cmdline
gibt keinen korrekten Prozessnamen an, sondern etwas wie 1111_1
. Ich muss benutzen /proc/2222/comm
um den korrekten Prozessnamen zu erhalten.
Paul Roub
Verwenden Sie den folgenden Befehl unter Linux
ls -l /proc/[pid]/exe
Es gibt den Namen des Prozesses/der Anwendung an
inihsrah
ps --pid <pid> -o comm h
: Dieser Befehl gibt den Namen der ausführbaren Datei an. Wenn Sie beispielsweise ein Skript name.sh ausführen, gibt der obige Befehl die Ausgabe als aus bash
ps --ppid <pid> -o comm h
: Dieser Befehl gibt die Ausgabe als aus name
mögliches Duplikat von Get process name by PID
– Hasturkun
21. März 2013 um 11:01 Uhr