• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Kill aus einem Script heraus funktioniert nicht

dsiggi

Member
Hi,
ich bin zur zeit dabei ein kleines programm, zum aufnehmen von einer TV-Karte, zu schreiben.

Dies ist der Code um den es sich handelt:
Code:
for prg in cat szap; do
killall $prg
sleep 1
PID=`ps ax | sed -e /$prg/!d -e /sed/d | cut -d " " -f 1`
let COUNT=0
while [ -n $PID ]; do
kill $PID
sleep 1
let COUNT++
if [  $COUNT > 10 ]; then
exit 1
fi
done
done
export DISPLAY=:0.0; xmessage Aufnahme wurde beendet! &
grep -v 06291722 /home/siggi/.tvrec/job.list > job.tmp
mv -f /home/siggi/.tvrec/job.tmp /home/siggi/.tvrec/job.list
rm -rf /home/siggi/.tvrec/anf-06291722
rm -rf /home/siggi/.tvrec/end-06291722

Cat wird immer beendet, aber szap will eifac nicht "tot" gehen.
Aber wenn cih manuel killall szap oder
Code:
PID=`ps ax | sed -e '/szap/!d' -e '/sed/d' | cut -d " " -f 1`; kill $PID
ausführe, wird szap auch gekillt.
Ich weis einfach nicht mehr weiter, warum das mit dem Script nicht funktioniert. Vielleicht könnt ihr mir helfen.

dsiggi
 

TomcatMJ

Guru
Hi!
Schon getestet ob überhaupt die richtige PID dabei rauskommt per "echo $PID" vor dem Kill-Befeh?
Wenn da die richtige drin ist, bleibt die Frage ob denn das Programm mit dem Signal 15 welchen kill ja per default von sich gibt beendbar ist. Wenn nein, dann kann ein "kill -9 $PID" eventuell die Lösung sein(also Signal 9 aka SIGKILL statt Signal 15 aka SIGHUP mit dem optionalen Parameter "-9" im kill-Befehl einfügen ),auch wenn damit das Programm sozusagen "hart erschossen" wird.....

Bis denne,
Tom
Edit:p.S.:Ähm,irgendwie sieht mir die Abbruchbedingung der While-Schleife da etwas seltsam aus...kanns sein,daß da eine Endlosscheife produziert wurde oder gar nichts gekillt wird?
 
OP
dsiggi

dsiggi

Member
Hi,
die PID ist richtig, habe ich schon getestet.
Mich wundert ja schon warum szap bei dem ersten "killall" nicht gekillt wird.

Das mit killall -9 $PID, werde ich dann mal versuchen.

Wegen der Endlosschleife,
ich kann heir kein endecken, die while-schleife wird doch nur ausgeführt wenn $COUNT < 10 ist. Und bei jedem Durchgang wird zu $COUNT 1 dazugezählt. Dann wird nach 11 mal mit exit 1 beendet.

dsiggi
 
OP
dsiggi

dsiggi

Member
Hi,
bist du sicher das es mit "killall -9 $PID" funktioniert?
Ich habe einfach mal xine gestertet und mit
Code:
ps ax | sed -e '/xine/!d' -e '/sed/d' | cut -d " " -f 1
PID von Xine extrahiert.
Ein killall -9 24466
gibt nun folgendes aus:
Code:
24466: Kein Prozess abgebrochen
.
Ein
Code:
killall -9 xine
funktioniert hingegen.

dsiggi
 
Oben