GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Linux:Woher wissen, wo ein Prozess gestartet wurde und wie er gestartet wurde?

Lösung 1:

Am zuverlässigsten ist es, sich den /proc anzusehen dir für den Prozess. Jeder Prozess hat eine /proc/<pid>/ Verzeichnis, in dem Informationen aufbewahrt werden wie:

  1. cwd Link zum aktuellen Arbeitsverzeichnis
  2. fd ein Verzeichnis mit Links zu den geöffneten Dateien (Dateideskriptoren)
  3. cmdline Lesen Sie es, um zu sehen, welche Befehlszeile verwendet wurde, um den Prozess zu starten
  4. environ die Umgebungsvariablen für diesen Prozess
  5. root ein Link zu dem, was der Prozess als sein Root-Verzeichnis betrachtet (es wird / sofern nicht chrooted)

Es gibt mehr coole Informationen zu jedem Prozess / proc, aber mit den oben genannten können Sie genau wissen, was vor sich geht.

Auch mit ps auxf wird Ihnen zeigen, wer was gegabelt hat, damit Sie eine bessere Vorstellung davon bekommen, wer Ihr Perl aufruft.

Lösung 2:

In den meisten Fällen wird einfach ps ausgeführt ist normalerweise ausreichend, zusammen mit Ihren Lieblingsflaggen, um eine breite Ausgabe zu ermöglichen. Ich tendiere zu ps -feww , aber die anderen Vorschläge hier werden funktionieren. Beachten Sie, dass wenn ein Programm von jemandes $PATH gestartet wurde , sehen Sie nur den Namen der ausführbaren Datei, nicht den vollständigen Pfad. 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 ps sichtbaren Informationen kann vom laufenden Programm komplett überschrieben werden. 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 ausführe:

$ gcc -o myprogram myprogram.c
$ ./myprogram &
[1] 10201

Und führen Sie dann ps aus , sehe ich 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 unter /proc/<pid>/exe nachsehen , die ein symbolischer Link zur entsprechenden ausführbaren Datei sein kann. Im obigen Beispiel erhalten Sie dadurch viel nützlichere Informationen als ps :

$ls -l /proc/9600/exe
lrwxrwxrwx. 1 lars lars 0 Feb  8 11:31 /proc/9600/exe -> /usr/bin/lftp

Lösung 3:

für mich habe ich gerade diesen pstree gefunden gab einen viel klareren Hinweis darauf, wie ein Prozess gestartet wurde, als ps aux

sieht so aus:

  ├─lightdm─┬─Xorg
  │         ├─lightdm─┬─init─┬─apache2───2*[apache2───26*[{apache2}]]
  │         │         │      ├─at-spi-bus-laun─┬─dbus-daemon
  │         │         │      │                 └─3*[{at-spi-bus-laun}]
  │         │         │      ├─at-spi2-registr───{at-spi2-registr}
  │         │         │      ├─dbus-daemon
  │         │         │      ├─dropbox───29*[{dropbox} ]

Lösung 4:

Sie können verwenden:

systemctl status <PID>

oder mit dem Namen des Prozesses:

systemctl status $(pgrep perl)

Dies liefert Informationen zu systemd-Diensten, die Ihren Prozess gestartet haben.

Ich habe diesen Hinweis hier gefunden

Lösung 5:

Versuchen Sie es mit ps axww | grep perl um die vollständige Befehlszeile Ihres Prozesses zu erhalten. Es sieht aus wie top habe gerade eine lange Linie abgeschnitten.


Linux
  1. So beenden Sie einen Zombie-Prozess unter Linux

  2. Wie ich mein altes Betriebssystem aufgegeben und zu Linux gesprungen bin

  3. Wie sind Sie zu Linux gekommen?

  4. So starten Sie den Linux-Befehl im Hintergrund und trennen den Prozess im Terminal

  5. So finden und töten Sie den Zombie-Prozess in Linux

So finden und beenden Sie laufende Prozesse in Linux

So arbeiten Sie mit Vordergrund- und Hintergrundprozessen unter Linux

Wie man einen Prozess unter Linux beendet

So finden Sie die PID und PPID eines Prozesses in Linux

So beenden Sie Prozesse in Linux mit kill, killall und pkill

So verfolgen und verfolgen Sie einen Linux-Prozess