In den meisten Fällen reicht es aus, nur zu laufen und ps
Ihre bevorzugten Flags zu verwenden, um eine breite Ausgabe zu ermöglichen. Ich neige dazu ps -feww
, aber die anderen Vorschläge hier werden funktionieren. Beachten Sie, dass beim Starten eines Programms von einer anderen Person $PATH
nur der Name der ausführbaren Datei und nicht der vollständige Pfad angezeigt wird. Versuchen Sie zum Beispiel Folgendes:
$ lftp &
$ ps -feww | grep ftp
lars 9600 9504 0 11:30 pts/10 00:00:00 lftp
lars 9620 9504 0 11:31 pts/10 00:00:00 grep ftp
Es ist wichtig zu beachten, dass die in sichtbaren Informationen ps
vom laufenden Programm vollständig überschrieben werden können. Zum Beispiel dieser Code:
int main (int argc, char **argv) {
memset(argv[0], ' ', strlen(argv[0]));
strcpy(argv[0], "foobar");
sleep(30);
return(0);
}
Wenn ich dies in eine Datei namens "myprogram" kompiliere und es ausführe:
$ gcc -o myprogram myprogram.c
$ ./myprogram &
[1] 10201
Und dann starte ps
, ich sehe einen anderen Prozessnamen:
$ ps -f -p 10201
UID PID PPID C STIME TTY TIME CMD
lars 10201 9734 0 11:37 pts/10 00:00:00 foobar
Sie können auch direkt nachsehen /proc/<pid>/exe
, welches ein Symlink zur entsprechenden ausführbaren Datei sein kann. Im obigen Beispiel erhalten Sie viel mehr nützliche Informationen als ps
:
$ls -l /proc/9600/exe
lrwxrwxrwx. 1 lars lars 0 Feb 8 11:31 /proc/9600/exe -> /usr/bin/lftp
/proc
liefern die Dateien alle Informationen über ein Programm,exe
sind eine Verknüpfung zur ausführbaren Datei,cwd
zum aktuellen Arbeitsverzeichnis, dasfd
Verzeichnis enthält Verknüpfungen zu geöffneten Dateien (einschließlich Standardeingabe, -ausgabe und Standardfehler)