Проблема
Я хотів би вбити процес під назвою 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
, мабуть, вбиває батько, а не той процес, якого він хотів.