2010-04-22 5 views
5

Quiero crear un script bash que lanzará dos procesos y matará el segundo proceso cuando termine el primero. Aquí hay un ejemplo:Tenedor dos procesos y matar el segundo cuando se realiza el primero

 
#fork first process 
producer& 

#fork second process 
consumer& 

#wait for producer to finish 
... 

#kill the consumer 
... 

Tengo la sensación de que esto puede ponerse feo pero tiene una solución muy simple. Por favor, ayúdame a completar los espacios en blanco.

Respuesta

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

wait $pid_foo 
kill $pid_bar 

Pero tal vez sólo podría funcionar foo | bar (si eso sucede a trabajar con el manejo de la entrada estándar/salida estándar).

+0

El tubo es inteligente, pero tal vez usted no quiere las consecuencias stdin/stdout – frankc

+1

no necesitas los PIDs, puede utilizar% 1,% 2 – topskip

+1

@Patrick: Si los procesos son en realidad sólo numerada , eso podría tener sentido. En el caso general, sin embargo, tiene más sentido nombrar las variables 'pid_foo' y' pid_bar', y eso es más claro al leer el código que '% 1' y'% 2'. Sin embargo, gracias por mencionar que existe esta posibilidad (al menos en bash). – ndim

3
#!/bin/bash 

#enable job control in script 
set -m 

producer & 

consumer & 

fg %1 

kill %2 
Cuestiones relacionadas