PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Script zweimal in Prozessliste - warum!?



Sausalito
18.07.05, 10:45
Hallo allerseits,

ich habe mir ein kleines Shell-Script geschrieben ("test.sh") und rufe das mit

/usr/local/bin/test.sh <parameter1> <parameter2> &auf.

In der Prozessliste taucht dieses Skript dann aber zweimal (mit unterschiedlichen PID's) auf.


9650 pts/2 S 0:00 /bin/sh /usr/local/bin/test.sh /mnt/test.log /usr/local/bin/test_words.cfg
9652 pts/2 S 0:00 /bin/sh /usr/local/bin/test.sh /mnt/test.log /usr/local/bin/test_words.cfg

Woran kann das liegen?


Chris

carstenj
18.07.05, 10:58
Hallo,

das wird ein Child Prozess sein, den dein Script (bzw. die Aufrufe in deinem Script) gestartet hat. Genauer kannst du das mit ps -ef sehen. PPID bedeutet Parent Process ID, und dieser Prozess hat eben den zweiten gestartet.

Sausalito
18.07.05, 12:01
hmmm........
ich hab jetzt soweit rausfinden können, wie dieser Child-Prozess entsteht.
In meinem Script gab es nämlich den Aufruf

tail -f -n 1 $inputfile | \
welcher durch das "\" den zweiten Prozess gestartet hat.
Ich hab das Skript ein wenig geändert - nun ist der zweite Prozess schon mal nicht mehr vorhanden in der Prozessliste.
Danke Dir für den Tip!

Jetzt hab ich aber - durch den "tail" Befehl einen entsprechenden Prozess laufen, was ja soweit auch logisch ist.

Wie kann ich den beenden, sobald sich auch der zugehörige "Vater"-Prozess (also das Skript selber) beendet hat?
Momentan läuft das "tail" munter weiter und ich habe nichts gefunden, wie man einen Prozess zzgl. aller gestarteten Child-Prozesse beenden kann.
Oder bin ich einfach nur etwas "blond" heute? ;)

Hast Du da vielleicht noch nen Tip für mich?

Danke...
Chris

rudi_m
18.07.05, 15:03
hmmm........
ich hab jetzt soweit rausfinden können, wie dieser Child-Prozess entsteht.
In meinem Script gab es nämlich den Aufruf

tail -f -n 1 $inputfile | \
welcher durch das "\" den zweiten Prozess gestartet hat.
Ich hab das Skript ein wenig geändert - nun ist der zweite Prozess schon mal nicht mehr vorhanden in der Prozessliste.
Danke Dir für den Tip!

Jetzt hab ich aber - durch den "tail" Befehl einen entsprechenden Prozess laufen, was ja soweit auch logisch ist.

Wie kann ich den beenden, sobald sich auch der zugehörige "Vater"-Prozess (also das Skript selber) beendet hat?
Momentan läuft das "tail" munter weiter und ich habe nichts gefunden, wie man einen Prozess zzgl. aller gestarteten Child-Prozesse beenden kann.
Oder bin ich einfach nur etwas "blond" heute? ;)

Hast Du da vielleicht noch nen Tip für mich?


wenn du im script "exec" for das tail schreibst dann wird das script durch den tail prozess ersetzt - vielleicht reicht Dir das.

ansonsten toetet z.B
/sbin/killproc -G /path/to/script
auch alle Kinder.

Wenn Du es komfortabler willst musst Du Deinem script beibringen was es beim kill tun soll - Stichwort "signal handling"