2010-04-22 9 views
5

Voglio creare uno script bash che avvii due processi e interrompa il secondo processo quando viene eseguito il primo. Ecco un esempio:Forcella due processi e uccide il secondo quando viene eseguito il primo

 
#fork first process 
producer& 

#fork second process 
consumer& 

#wait for producer to finish 
... 

#kill the consumer 
... 

Ho la sensazione che questo può diventare brutto ma ha una soluzione molto semplice. Per favore aiutami a riempire gli spazi vuoti.

risposta

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

wait $pid_foo 
kill $pid_bar 

Ma forse si può solo eseguire foo | bar (se ciò accade a lavorare con la gestione stdin/stdout).

+0

Il tubo è intelligente ma forse non si vuole le conseguenze stdin/stdout – frankc

+1

non ti servono i PID, è possibile utilizzare% 1,% 2 – topskip

+1

@Patrick: Se i processi sono in realtà solo numerati questo potrebbe avere senso Nel caso generale, tuttavia, ha più senso denominare le variabili 'pid_foo' e' pid_bar', e questo è più chiaro quando si legge il codice di '% 1' e'% 2'. Tuttavia, grazie per aver menzionato che questa possibilità esiste (almeno in bash). – ndim

3
#!/bin/bash 

#enable job control in script 
set -m 

producer & 

consumer & 

fg %1 

kill %2 
Problemi correlati