我有這樣的命令:如何從C執行命令,並終止其
./mjpg_streamer -i "./input_uvc.so -n -f 15 -r 1280x720" -o "./output_http.so -n -w ./www "
通過以太網視頻流。目前我正在運行終端,而對於退出,我只需按Ctrl + c。但我需要使用c代碼來做到這一點。有沒有可能或有其他方法可用?
謝謝。
我有這樣的命令:如何從C執行命令,並終止其
./mjpg_streamer -i "./input_uvc.so -n -f 15 -r 1280x720" -o "./output_http.so -n -w ./www "
通過以太網視頻流。目前我正在運行終端,而對於退出,我只需按Ctrl + c。但我需要使用c代碼來做到這一點。有沒有可能或有其他方法可用?
謝謝。
從技術上講,您可以通過使用fork()
和exec
系列來完成您需要做的事情。
它可能像這樣工作:
pid_t PID = fork();
if(PID == 0) {
execl("yourcommandhere");
exit(1);
}
//do Whatever
kill(PID, 15); //Sends the SIGINT Signal to the process, telling it to stop.
execl
(或任何其他家庭成員,請看這裏:http://linux.die.net/man/3/execl),將取代你打電話的過程中,當前進程。這是我們用fork創建的子進程。 Fork爲子進程返回'0',並將子進程的實際進程ID返回給原始進程調用fork,從而給出原始進程控制權。
通過調用kill
並提供SIGINT
(15),您正在使用指定的PID(您從fork中獲得)告訴進程停止。 exit(1)
是必要的,否則,如果execl
應該失敗,那麼您將有兩個進程在您手中執行相同的操作。這是一個故障安全。
我希望這會有所幫助。
usaually我們使用系統(「command」);
複製整個命令到串可以說海峽
./mjpg_streamer -i "./input_uvc.so -n -f 15 -r 1280x720" -o "./output_http.so -n -w ./www "
轉換爲字符串,然後用
system(str); //in c code.
當你與system(./mjpg_streamer)
執行創建mjpg_streamer一個用戶進程
您可以pkill(mjpg_streamer)
不,當mjpg_streamer仍在運行時,第一次調用'system'將不會返回。 – aschepler
再次殺死這個過程中瞭解[叉(2)](http://man7.org /linux/man-pages/man2/fork.2.html)和[execve(2)](http://man7.org/linux/man-pages/man2/execve.2.html)[Advanced Linux Programming ](http://advancedlinuxprogramming.com/),也許關於[popen(3)](http://man7.org/linux/man-pages/man3/popen.3.html) –