vielleicht kann jemand meinem Verständnis ein wenig auf die Sprünge helfen.
Die Grundidee ist folgende: Aus einem Skript heraus sollen mittels while-Schleife weitere Skripte aufgerufen werden. Die while-Schleife soll aber warten, bis die aufgerufenen Skripte jeweils bis zu einem bestimmten Punkt abgearbeitet sind. Ich dachte dies mit
"suspend"
und
"kill -SIGCONT $PPID"
lösen zu können. Beim Aufruf des Skripts scheint aber weder die Schleife noch der "suspend"-Befehl beachtet zu werden. Um das mal genauer zu testen, hab ich mal zwei kleine Testskripte gebaut:
test1.sh:
Code: Alles auswählen
#!/bin/bash
set -mb
echo "test1: bin da mit PID $$ und rufe test2 auf.."
i=1
while [ $i -lt 6 ]
do
echo "...das $i te mal"
./test2.sh &
i=`expr $i + 1`
echo
echo "test1: und warte"
suspend
done
echo "test1: Schleife beendet und laufe weiter"
exit 0
Code: Alles auswählen
#!/bin/bash
echo "test2: bin da mit Prozess ID $$ und schlafe 15 Sekunden"
sleep 15
echo "test2: bin aufgewacht und rufe zu Prozess Nr $PPID "
kill -SIGCONT $PPID
exit 0
Code: Alles auswählen
stephan@homeoffice:~$ ./test1.sh
test1: bin da mit PID 30351 und rufe test2 auf..
...das 1 te mal
test2: bin da mit Prozess ID 30352 und schlafe 15 Sekunden
test1: und warte
[1]+ Angehalten ./test1.sh
stephan@homeoffice:~$ test2: bin aufgewacht und rufe zu Prozess Nr 30351
...das 2 te mal
test1: und warte
stephan@homeoffice:~$ exit
Es gibt noch angehaltene Prozesse.
[1]+ Angehalten ./test1.sh
stephan@homeoffice:~$ test2: bin da mit Prozess ID 30355 und schlafe 15 Sekunden
Laut ps ax ist "test1.sh" zu diesem Zeitpunkt bereits tot, "test2.sh" schläft sich noch aus und verabschiedet sich dann auch. Es ist schon klar das "test2.sh" nicht nochmal aufgerufen wird, da der Elternprozess ja nicht mehr existiert. Aber warum begeht das aufrufende Terminal Selbstmord? Oder wird mir einfach nicht alles mitgeteilt was da so im HIntergrund passiert? Kann mir jemand dieses Verhalten etwas genauer erläutern so das ich den Fehler finden kann?
Vielen Dank und Gruß
Stephan