2010-04-22 4 views
5

Je veux créer un script bash qui va lancer deux processus et tuer le second processus lorsque le premier est terminé. Voici un exemple:Fourchez deux processus et tuez le second lorsque le premier est terminé

 
#fork first process 
producer& 

#fork second process 
consumer& 

#wait for producer to finish 
... 

#kill the consumer 
... 

J'ai l'impression que cela peut devenir moche mais a une solution très simple. Aidez-moi s'il vous plaît à remplir les espaces.

Répondre

12
foo & pid_foo=$! 
bar & pid_bar=$! 

wait $pid_foo 
kill $pid_bar 

Mais vous pourriez peut-être juste courir foo | bar (si cela arrive à travailler avec la manipulation stdin/stdout).

+0

Le tuyau est intelligent, mais peut-être que vous ne voulez pas les conséquences stdin/stdout – frankc

+1

vous n'avez pas besoin pids, vous pouvez utiliser% 1,% 2 – topskip

+1

@Patrick: Si les processus sont en fait juste numérotés , cela pourrait avoir un sens. Dans le cas général, cependant, il est plus logique de nommer les variables 'pid_foo' et' pid_bar', et cela est plus clair lors de la lecture du code que '% 1' et '% 2'. Cependant, merci de mentionner que cette possibilité existe (au moins en bash). – ndim

3
#!/bin/bash 

#enable job control in script 
set -m 

producer & 

consumer & 

fg %1 

kill %2 
Questions connexes