it-swarm.com.de

So erhalten Sie einen untergeordneten Prozess vom übergeordneten Prozess

Ist es möglich, die untergeordnete Prozess-ID von der übergeordneten Prozess-ID im Shell-Skript abzurufen?

Ich muss eine Datei mithilfe eines Shell-Skripts ausführen, was zu einem neuen Prozess führt process1 (übergeordneter Prozess). Dies process1 hat einen anderen Prozess ausgelöst process2 (untergeordneter Prozess). Mit Hilfe eines Skripts kann ich die PID von process1 mit dem folgenden Befehl ermitteln:

cat /path/of/file/to/be/executed

aber ich bin nicht in der Lage, die PID des untergeordneten Prozesses abzurufen.

62
AlwaysALearner

Benutz einfach :

pgrep -P $your_process1_pid
114
Miklos Aubert

Ich bin mir nicht sicher, ob ich dich richtig verstehe. Hilft das?

ps --ppid <pid of the parent>
53
Kent

Ich habe ein Skript geschrieben, um alle untergeordneten Prozess-Pids eines übergeordneten Prozesses abzurufen. Hier ist der Code. Hoffentlich hilft es.

function getcpid() {
    cpids=`pgrep -P $1|xargs`
#    echo "cpids=$cpids"
    for cpid in $cpids;
    do
        echo "$cpid"
        getcpid $cpid
    done
}

getcpid $1
20
Goofy

Der Shell-Prozess ist $$, Da es sich um einen Sonderparameter handelt

Unter Linux enthält das Dateisystem proc (5) viele Informationen zu Prozessen. Vielleicht hilft auch pgrep (1) (der auf /proc Zugreift).

Versuchen Sie also cat /proc/$$/status, Um den Status des Shell-Prozesses abzurufen.

Daher könnte seine übergeordnete Prozess-ID mit z.

  parpid=$(awk '/PPid:/{print $2}' /proc/$$/status)

Verwenden Sie dann $parpid In Ihrem Skript, um auf die übergeordnete Prozess-PID (die übergeordnete der Shell) zu verweisen.

Aber ich glaube nicht, dass du es brauchst!

Lesen Sie einige Bash Guide (oder mit Vorsicht Advanced Bash Scripting Guide , der Fehler enthält) und Advanced Linux Programming .

Beachten Sie, dass einige Server-Daemon-Prozesse (die normalerweise eindeutig sein müssen) ihre PID explizit in /var/run Schreiben, z. Der Server-Daemon sshd schreibt seine PID in die Textdatei /var/run/sshd.pid). Möglicherweise möchten Sie eine solche Funktion in Ihre eigenen serverähnlichen Programme einfügen (in C, C++, Ocaml, Go, Rust oder einem anderen kompilierten Sprache).

14

Um den untergeordneten Prozess und Thread abzurufen, pstree -p PID. Es zeigt auch den hierarchischen Baum

5
where23
ps -axf | grep parent_pid 

Der obige Befehl druckt die entsprechenden Prozesse aus parent_pid, ich hoffe es hilft. +++++++++++++++++++++++++++++++++++++++++++

[email protected]:~/chk_prgrm/lp#

 parent...18685

 child... 18686


[email protected]:~/chk_prgrm/lp# ps axf | grep frk

 18685 pts/45   R      0:11  |       \_ ./frk

 18686 pts/45   R      0:11  |       |   \_ ./frk

 18688 pts/45   S+     0:00  |       \_ grep frk
4
krishna