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.
Il suffit d'utiliser:
pgrep -P $your_process1_pid
Je ne sais pas si je vous ai bien compris, est-ce que cela vous aide?
ps --ppid <pid of the parent>
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
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).
Pour obtenir le processus enfant et le thread, pstree -p PID
. Il montre également l'arborescence hiérarchique
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