Problema
Gostaria de matar um processo chamado raspivid (programa que grava vídeos usando uma câmera Raspberry Pi), mas não posso ...
É assim que eu chamo:
#!/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 $$
Se eu procurar por esse processo, ele ainda estará lá:
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
Se eu tentar matá-lo, ele não morre. Em vez disso, altera o PID pai para 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
Observações:
- A chamada funciona bem por um tempo (2 horas ou mais) e começa a desligar.
- Somente um desligamento físico resolve o problema. Não consigo reiniciar via terminal (trava também)
Minhas perguntas:
- Por que o Linux atribui o PID pai a 1?
- Por que o processo não pode ser morto? (Eu também tentei
sudo kill -9 7238
)
killall
aparentemente, ele está matando os pais, não o processo que ele queria.