我需要使用C执行二进制文件并使用kill终止它,但是在fork中使用execl()并不开始这个过程。我使用以下代码,
pid_t PID = fork();
if(PID == 0) {
execl("/home/pi/mjpg-streamer/mjpg_streamer -i \"/home/pi/mjpg-streamer/input_uvc.so -n -f 15 -r 640x480\" -o \"/home/pi/mjpg-streamer/output_http.so -n -w /home/pi/mjpg-streamer/www \"",(char*)0);
exit(1);
}
// Wait to kill child process
int p;
cin>>p;
kill(PID, 15); //Sends the SIGINT Signal to the process, telling it to stop.
任何人都可以帮我解决这个问题......
...谢谢
答案 0 :(得分:4)
您正在将完整的命令行传递给execl()
来电,这是无效的。
调用的参数是1)可执行文件的路径,2 ... n)命令行组件(main接收的argv)和n + 1)0终止符。因此,根据您的需要,调用应该类似于:
execl("/home/pi/mjpg-streamer/mjpg_streamer", "mjpg_streamer", "-i", "/home/pi/mjpg-streamer/input_uvc.so -n -f 15 -r 640x480", "-o", "/home/pi/mjpg-streamer/output_http.so -n -w /home/pi/mjpg-streamer/www", (char*)0);
在execl调用之后放置一个perror("execl:");
...如果达到了perror,你的参数仍然不是他们需要的(因为调用仍然无法执行新进程)并且错误可能帮助说明原因。