2010-04-22 7 views
5

İki işlem başlatacak ve ilk işlem bittiğinde ikinci işlemi öldürecek bir bash komut dosyası oluşturmak istiyorum. İşte bir örnek:İki işlem çatalı ve ilk iş bittiğinde ikinciyi öldür

 
#fork first process 
producer& 

#fork second process 
consumer& 

#wait for producer to finish 
... 

#kill the consumer 
... 

Bunun çirkinleşebileceğine dair bir fikrim var ama çok basit bir çözümü var. Lütfen boşlukları doldurmama yardım et.

cevap

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

wait $pid_foo 
kill $pid_bar 

Ama (yani Stdin/stdout elleçleme ile çalışmak olursa) belki sadece foo | bar çalıştırabilir.

+0

,% 2 – frankc

+1

Stdin/stdout'u sonuçları% 1 kullanabilirsiniz istemiyorum: süreçleri aslında sadece numaralandırılmış ise Bu mantıklı olabilir. Genel durumda, pid_foo ve pid_bar değişkenlerini isimlendirmek daha mantıklıdır ve kodu okurken "% 1" ve "% 2" den daha nettir. Ancak, bu olasılığın varlığından bahsetmiş olduğunuz için teşekkürler (en azından bash). – topskip

+1

@Patrick boru zekidir ama belki sen pids gerekmez – ndim

3
#!/bin/bash 

#enable job control in script 
set -m 

producer & 

consumer & 

fg %1 

kill %2