проблема
Я хотел бы убить процесс под названием raspivid (программа, которая записывает видео с помощью камеры Raspberry Pi), но я не могу ...
Вот как я это называю:
#!/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 $$
Если я ищу этот процесс, он все еще там:
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
Если я попытаюсь убить его, он не умрет. Вместо этого он изменяет родительский PID на 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
Замечания:
- Звонок работает некоторое время (2 часа или около того), затем начинает зависать.
- Только физическое отключение решает проблему. Не могу перезагрузить через терминал (тоже зависает)
Мои вопросы:
- Почему Linux назначает родительский PID 1?
- Почему процесс не может быть убит? (Я тоже пробовал
sudo kill -9 7238
)
killall
, очевидно, убивает родителя, а не процесс, который он хотел.