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 n'est pas toujours tué, donc j'aimerais pouvoir identifier le PID d'imapsync par programme à partir de mon script, afin de pouvoir tuer le processus imapsync moi-même dans un gestionnaire de signaux.
Alors, comment puis-je obtenir par programme le PID d'un processus enfant à partir d'un script bash parent?
Réponses:
imapsync a une option pour définir où son pid est écrit:
--pidfile: le fichier où le pid imapsync est écrit.
la source
IOW, tout comme
$$
détient votre PID,$!
possède le PID de la commande d'arrière-plan la plus récemment exécutée .la source
/var/run/whatever.pid
. Il y a peut-être une option en ligne de commande pour lui demander d'enregistrer le PID quelque part; sinon, cela ressemble à une fonctionnalité à demander à l'auteur ou à mettre en œuvre vous-même.&
), la$!
variable n'est pas définie./bin/sh -c 'echo $$>/tmp/my.pid && exec program args' &
- sysfault 24 novembre 10 à 14:28Contrairement à
pidof
, ilpgrep
peut être donné une variété d'options pour restreindre les processus pour lesquels il renvoie des PID. Un qui peut être particulièrement utile est de sélectionner en fonction de PPID en utilisant le PID du processus actuel.qui ne sortira les PID de imapsync que s'ils sont des enfants de votre script.
la source
Que diriez-vous de mettre imapsync en arrière-plan momentanément, d'obtenir le PID puis de le mettre au premier plan ... Quelque chose comme ceci:
la source