içinde tuzak kullanarak sonlandırılmış arka plan sürecinin pid yakalama Bir dizi arka plan işlemlerini üreten bir bash komut dosyası yazıyorum. Bir süreç sona erdiğinde bildirilmek isterim; ve sonlandırılmış sürecin pidini bilmek istiyorum.bash
wait
kullanarak, her bir oluşturulmuş işlemin pids'lerinin bir dizide yakalanıp saklanacağı ve sonra dizinin üzerinde yineleneceği ve her işlem için beklemenin yapıldığı görülmüştür. Bu teknik burada çeşitli şekillerde tarif edilir: Ben doğru anlamak eğer
https://stackoverflow.com/a/356154/366856
bu sorun, bireysel bir süreç sona erdiği konmaz eylemi gerçekleştirmek istiyorsanız nispeten verimsiz olabilmesidir . Örneğin, A ve B işlemlerini ve B'yi A'dan önce bitirirseniz, yürütme işlemi hem A hem de B'nin bitmesini beklemelidir. B biter bitmez bir işlem yapmam gerek.
trap SIGCHLD
, bir çocuk sonlandığında hemen bir eylem gerçekleştirme yoludur, ancak sorun şu ki, aynı zamanda ihtiyaç duyduğum SIGCHLD sinyalinin kaynağını belirlemek için bir yol bulamıyorum. Bunun bir uygulama örneğinin saptadığımız en yakın şey bu yazı üçüncü kod örnektir:
http://www.linuxforums.org/forum/programming-scripting/103996-multithreading-bash.html#post510187
:
#!/bin/bash
iNext=0
function ChildReturned() {
wait $1
echo "$1 was returned. Its exits status was: $?"
iNext=$((iNext+1))
StartChild $iNext
}
function StartChild {
./child $1 &
pid=$!
echo "Started: $1 PID= $pid"
trap 'ChildReturned $pid' SIGCHLD
}
set -bm
for ((iNext=0; iNext<=10; iNext++));
do
StartChild $iNext
done
wait
ben Bu örneğin işe yaramadığını düşünün çünkü yazar, trap
numaralı çağrıyı birden çok kez çağırıyordu, her defasında farklı bir pid değişkeni trap
argümanında yakaladı. Her zaman tuzak denir, önceki çağrının üzerine yazar ve böylece keyfi bir pid yakalanır. Daha iyi bir teknik bulamadım.
Bash'da tuzak kullanarak sonlandırılmış alt işlemin pidini elde etmenin bir yolu var mı?
Sadece şimdiye kadar gördüğüm bu soruna çözüm en iyi, en kapsamlı bir bakış içeren bu kaynak, işaret etmek istedik
Güncelleme:
http://mywiki.wooledge.org/ProcessManagement – jordanm
'kill -0 $ PID': Çok kullanışlı! Teşekkürler! – jbeard4
Daha da iyisi, bölüm denilen * Bir grup dosyayı paralel olarak işlemek istiyorum ve bittiğinde bir sonraki aşamaya geçmek istiyorum. Ve bir seferde tam olarak 5 işin çalıştığından emin olmak istiyorum. * Şu ana kadar okumuş olduğum en iyi cevap – jbeard4