如何从C执行命令并终止它

Har*_*ris 4 c c++ linux

我有这样的命令:

./mjpg_streamer -i "./input_uvc.so -n -f 15 -r 1280x720" -o "./output_http.so -n -w ./www "
Run Code Online (Sandbox Code Playgroud)

用于通过以太网传输视频.目前我正在通过终端运行,对于退出我只需按Ctrl + c.但我需要使用c代码来做到这一点.是否有可能或任何其他方法可用?

谢谢.

Ref*_*ium 7

从技术上讲,您可以通过使用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.
Run Code Online (Sandbox Code Playgroud)

execl(或者该家族的任何其他成员,请看这里:http://linux.die.net/man/3/execl),将用您正在调用的进程替换当前进程.这是我们用fork创建的子进程.Fork为子进程返回'0',并将子进程的实际进程ID返回给原始进程调用fork,后者给出了原始进程控制.

通过调用kill和提供SIGINT(15),您将使用指定的PID(您从fork获得)告诉进程停止.exit(1)是必要的,因为否则,如果execl失败,你将有两个进程在你手上做同样的事情.这是一个故障保险.

我希望这有帮助.