web-dev-qa-db-fra.com

Le PID d'un processus d'enfant Bash (imapsync) - comment l'obtenez-vous?

Quelqu'un peut-il me dire comment obtenir le PID d'une commande exécutée dans Bash.

Par exemple. J'ai un script Bash qui exécute imapsync.

Lorsque le script est tué, le processus imapsync ne se fait pas toujours tué, je voudrais donc pouvoir identifier le PID d'imapsync à partir de mon script, de sorte que je puisse tuer le processus Imapsync moi-même dans un gestionnaire de signal.

Alors, comment puis-je obtenir de manière programmative le PID d'un processus enfant d'un script de parent bash?

15
Jason Tan

imapsync a une option pour définir où son PID est écrit:

--Pidfile: le fichier où imapsync pid est écrit.

4
Gilles LAMIRAL
any_command args &
my_child_PID=$!

Iow, tout comme $$ tient votre pid, $! a le PID de la la dernière commande d'arrière-plan exécutée.

46
Javier

Contrairement à pidof, pgrep peut avoir une variété d'options pour restreindre quels processus répondent PIDS. Celui qui peut être particulièrement utile consiste à sélectionner sur la base de PPID en utilisant le PID du processus en cours.

pgrep -P $$ imapsync

ce qui ne produira que des PID d'imapsync s'ils sont des enfants de votre script.

Qu'en est-il de mettre momentanément imapsync dans l'arrière-plan, d'obtenir le PID puis de le planifier ... quelque chose comme ça:

imapsync &
pid=$!
wait $pid
retVal=$?
0
Mark