Problem
Chciałbym zabić proces o nazwie raspivid (program, który nagrywa filmy za pomocą aparatu Raspberry Pi), ale nie mogę ...
Tak to nazywam:
#!/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 $$
Jeśli szukam tego procesu, nadal tam jest:
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
Jeśli spróbuję go zabić, to nie umrze. Zamiast tego zmienia nadrzędny PID na 1:
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
Obserwacje:
- Połączenie działa przez chwilę dobrze (2 godziny lub coś), a następnie zaczyna się zawieszać.
- Tylko fizyczne wyłączenie zasilania rozwiązuje problem. Nie mogę zrestartować się przez terminal (również się zawiesza)
Moje pytania:
- Dlaczego Linux przypisuje nadrzędny PID do 1?
- Dlaczego proces nie może zostać zabity? (Próbowałem też
sudo kill -9 7238
)
killall
najwyraźniej zabija rodzica, a nie proces, który chciał.