मुसीबत
मैं raspivid (प्रोग्राम जो एक रास्पबेरी पाई कैमरा का उपयोग करके वीडियो रिकॉर्ड करता है) नामक एक प्रक्रिया को मारना चाहता हूं, लेकिन मैं नहीं कर सकता ...
यह मैं इसे कैसे कहते हैं:
#!/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 घंटे या कुछ और) फिर यह लटकने लगता है।
- केवल एक भौतिक शक्ति समस्या को हल करती है। मैं टर्मिनल के माध्यम से रिबूट नहीं कर सकता (यह भी लटका हुआ है)
मेरे सवाल:
- लिनक्स पेरेंट को PID 1 क्यों देता है?
- प्रक्रिया को क्यों नहीं मारा जा सकता है? (मैंने भी कोशिश की
sudo kill -9 7238
)
killall
स्पष्ट रूप से माता-पिता को मार रहा है, न कि वह प्रक्रिया जिसे वह चाहता था।