Problem
Ich möchte einen Prozess namens raspivid (Programm, das Videos mit einer Raspberry Pi-Kamera aufzeichnet) beenden, kann aber nicht ...
So nenne ich es:
#!/bin/bash
#Start recording...
raspivid -w 800 -h 600 -t 15000 -o $1 -v -n -rot 270 >> /home/pi/log/camera_output.txt 2>&1 &
#Waiting the video to be complete
sleep 16
#Killing child process
sudo kill -9 $!
#Killing parent process
sudo kill -9 $$
Wenn ich nach diesem Prozess suche, ist er immer noch da:
pi@raspberrypi ~ $ ps -ef | grep raspivid
root 7238 7234 0 21:53 ? 00:00:00 [raspivid]
pi 17096 14925 0 22:05 pts/0 00:00:00 grep --color=auto raspivid
Wenn ich versuche, es zu töten, stirbt es nicht. Stattdessen wird die übergeordnete PID in 1 geändert:
pi@raspberrypi ~ $ sudo killall raspivid
pi@raspberrypi ~ $ ps -ef | grep raspivid
root 7238 1 0 21:53 ? 00:00:00 [raspivid]
pi 17196 14925 0 22:05 pts/0 00:00:00 grep --color=auto raspivid
pi@raspberrypi ~ $ sudo killall raspivid
Beobachtungen:
- Der Anruf funktioniert eine Weile (2 Stunden oder so), dann beginnt er zu hängen.
- Nur ein physisches Ausschalten löst das Problem. Ich kann nicht über das Terminal neu starten (es hängt auch)
Meine Fragen:
- Warum weist Linux die übergeordnete PID 1 zu?
- Warum kann der Prozess nicht beendet werden? (Ich habe es auch versucht
sudo kill -9 7238
)
killall
tötet er anscheinend die Eltern, nicht den Prozess, den er wollte.