ปัญหา
ฉันต้องการฆ่ากระบวนการที่เรียกว่า 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
เห็นได้ชัดว่าเขาฆ่าพ่อแม่ไม่ใช่กระบวนการที่เขาต้องการ