98 votes

Comment obtenir un processus enfant à partir d'un processus parent

Est-il possible d'obtenir l'id du processus enfant à partir de l'id du processus parent dans le shell script ?

J'ai un fichier à exécuter en utilisant le shell script, ce qui conduit à un nouveau processus processus1 (processus parent). Ce site processus1 a bifurqué vers un autre processus processus2 (processus enfant). En utilisant script, je suis capable d'obtenir le pid de processus1 en utilisant la commande :

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

mais je ne parviens pas à récupérer le pid du processus enfant.

174voto

Miklos Aubert Points 1848

Utilisez simplement :

pgrep -P $your_process1_pid

68voto

Kent Points 71470

Je ne suis pas sûr d'avoir bien compris, cela vous aide-t-il ?

ps --ppid <pid of the parent>

24voto

Goofy Points 141

J'ai écrit un script pour obtenir tous les pids des processus enfants d'un processus parent. Voici le code. J'espère que cela vous aidera.

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

getcpid $1

15voto

Basile Starynkevitch Points 67055

Le processus de l'obus est $$ puisqu'il s'agit d'un paramètre spécial

Sous Linux, le proc(5) Le système de fichiers donne beaucoup d'informations sur les processus. Peut-être que pgrep(1) (qui accède à /proc ) pourrait aussi aider.

Essayez donc cat /proc/$$/status pour obtenir le statut du processus shell.

Par conséquent, l'identifiant du processus parent peut être récupéré avec, par exemple, la commande suivante

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

Ensuite, utilisez $parpid dans votre script pour faire référence au pid du processus parent (le parent du shell).

Mais je ne pense pas que vous en ayez besoin !

Lire un peu Guide Bash (ou avec prudence guide avancé des scripts bash qui a des erreurs) et programmation linux avancée .

Remarquez que certains processus de démons de serveurs (qui doivent généralement être uniques) écrivent explicitement leur pid dans le fichier /var/run par exemple, le   sshd Le démon du serveur écrit son pid dans le fichier textuel /var/run/sshd.pid ). Vous voudrez peut-être ajouter une telle fonctionnalité à vos propres programmes de type serveur (codés en C, C++, Ocaml, Go, Rust ou autre). compilé langue).

15voto

where23 Points 125

Pour obtenir le processus enfant et le thread, pstree -p PID . Il montre également l'arbre hiérarchique

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X