Vấn đề
Tôi muốn giết một quá trình gọi là raspivid (chương trình ghi video bằng Raspberry Pi Camera) nhưng tôi không thể ...
Đây là cách tôi gọi nó:
#!/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 $$
Nếu tôi tìm kiếm quá trình này, nó vẫn ở đó:
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
Nếu tôi cố giết nó, nó sẽ không chết. Thay vào đó, nó thay đổi PID gốc thành 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
Quan sát:
- Cuộc gọi hoạt động tốt trong một thời gian (2 giờ hoặc một cái gì đó) sau đó nó bắt đầu treo.
- Chỉ có một sức mạnh vật lý tắt giải quyết vấn đề. Tôi không thể khởi động lại qua thiết bị đầu cuối (nó cũng bị treo)
Những câu hỏi của tôi:
- Tại sao Linux lại gán cho cha mẹ là 1?
- Tại sao quá trình không thể bị giết? (Tôi cũng đã thử
sudo kill -9 7238
)
killall
rõ ràng là giết cha mẹ, không phải là quá trình anh ta muốn.