0

我需要使用 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.

谁能帮我解决这个问题...

谢谢....

4

1 回答 1

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);

perror("execl:");在 execl 调用之后放置一个...如果达到您的错误,您的参数仍然不是它们需要的(因为调用仍然无法执行新进程)并且错误可能有助于指出原因。

于 2013-09-09T12:20:57.273 回答