如何在fork()中使用execl()并杀死它

How can I use execl() inside fork() and kill it

本文关键字:execl fork      更新时间:2023-10-16

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

任何人都可以帮助我解决这个问题...

谢谢。。。。

您正在向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:");...如果达到错误,则参数仍然不是它们需要的参数(因为调用仍然无法执行新进程),并且错误可能有助于指示原因。