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

Wie erkennt ein Hintergrundprozess seine eigene Pid?

Ich verwende Bash auf einem RH-Linux-System.

Normalerweise können Sie Ihre eigene PID mit der Variable $$ erhalten. Wenn jedoch ein Skript eine seiner eigenen Funktionen als Hintergrundprozess ausführt, funktioniert das nicht; Alle im Hintergrund ausgeführten Funktionen erhalten die PID des übergeordneten Skripts, wenn $$ verwendet wird.

Hier ist zum Beispiel ein Testskript:

    /tmp/test:
    #!/bin/bash
    echo "I am $$"
    function proce {
      sleep 3
      echo "$1 :: $$"
    }

    for x in aa bb cc; do
      eval "proce $x &"
      echo "Started: $!"
    done

Wenn es ausgeführt wird:

    /tmp$ ./test
    I am 5253
    Started: 5254
    Started: 5256
    Started: 5258
    /tmp$ aa :: 5253
    bb :: 5253
    cc :: 5253

Also – das übergeordnete Skript (/tmp/test) wird als PID 5253 ausgeführt und löst drei Hintergrundprozesse mit den PIDs 5254, 5256 und 5258 aus. Aber jeder dieser Hintergrundprozesse erhält den Wert 5253 mit $$.

Wie können diese Prozesse ihre tatsächliche PID ermitteln?

Akzeptierte Antwort:

$BASHPID könnte das sein, wonach Sie suchen.

BASHPID

Erweitert auf die Prozess-ID des aktuellen Bash-Prozesses. Dies unterscheidet sich unter bestimmten Umständen von $$, z. B. Subshells, die
keine Neuinitialisierung von Bash erfordern.

Im Gegensatz zu $$

($$) Erweitert auf die Prozess-ID der Shell. In einer ()-Subshell wird es
zur Prozess-ID der aufrufenden Shell erweitert, nicht zur Subshell.

http://www.gnu.org/software/bash/manual/bashref.html#Bash-Variablen


Linux
  1. Kann den Gedit-Prozess nicht von seiner Pid aus beenden?

  2. Wie unterbreche ich einen Hintergrundprozess und bringe ihn in den Vordergrund?

  3. Wie kann ich einen Prozess anhand des Namens anstelle der PID beenden?

  4. Wie bekomme ich die Prozess-ID, um einen Nohup-Prozess zu beenden?

  5. So legen Sie die Prozess-ID in Linux für ein bestimmtes Programm fest

So finden Sie einen Prozessnamen mithilfe der PID-Nummer in Linux

So finden Sie den Prozessnamen anhand seiner PID

So finden Sie die PID und PPID eines Prozesses in Linux

So senden Sie Prozesse unter Linux an den Hintergrund

Wie bekomme ich PID nach Prozessname?

Wenn ich die PID-Nummer eines Prozesses kenne, wie erhalte ich seinen Namen?