web-dev-qa-db-fra.com

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

Est-il possible d'obtenir l'ID de processus enfant à partir de l'ID de processus parent dans le script Shell?

J'ai un fichier à exécuter à l'aide d'un script Shell, ce qui conduit à un nouveau processus process1 (processus parent). Ceci process1 a créé un autre processus process2 (processus enfant). En utilisant le script, je peux obtenir le pid de process1 en utilisant la commande:

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

mais je suis incapable de récupérer le pid du processus enfant.

62
AlwaysALearner

Il suffit d'utiliser:

pgrep -P $your_process1_pid
114
Miklos Aubert

Je ne sais pas si je vous ai bien compris, est-ce que cela vous aide?

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

J'ai écrit un script pour obtenir toutes les informations de processus enfants d'un processus parent. Voici le code.Espérons que cela aide.

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

getcpid $1
20
Goofy

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

Sous Linux, le système de fichiers proc (5) fournit de nombreuses informations sur les processus. Peut-être pgrep (1) (qui accède à /proc) pourrait aussi aider.

Alors essayez cat /proc/$$/status pour obtenir le statut du processus Shell.

Par conséquent, son identifiant de processus parent pourrait être récupéré avec, par exemple,.

  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!

Lisez quelques Guide Bash (ou avec prudence guide de script avancé bash , qui comporte des erreurs) et programmation avancée de Linux .

Notez que certains processus démons de serveur (qui doivent généralement être uniques) écrivent explicitement leur pid dans /var/run, par exemple. le démon serveur sshd écrit son pid dans le fichier texte /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 quelque chose d’autre compilé langue).

14

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

5
where23
ps -axf | grep parent_pid 

La commande ci-dessus imprime les processus respectifs générés à partir de parent_pid, J'espère que ça aide. +++++++++++++++++++++++++++++++++++++++++++++

root@root:~/chk_prgrm/lp#

 parent...18685

 child... 18686


root@root:~/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