5

我有这样的命令:

./mjpg_streamer -i "./input_uvc.so -n -f 15 -r 1280x720" -o "./output_http.so -n -w ./www "

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

谢谢。

4

4 回答 4

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.

execl(或任何其他家庭成员,请看这里: http: //linux.die.net/man/3/execl),将用您正在调用的进程替换当前进程。这是我们用 fork 创建的子进程。Fork 将子进程的“0”和子进程的实际进程 ID 返回给调用 fork 的原始进程,从而赋予原始进程控制权。

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

我希望这有帮助。

于 2013-08-30T10:33:20.563 回答
1

当你执行system(./mjpg_streamer)

创建了一个用户进程 mjpg_streamer

您可以再次终止此过程pkill(mjpg_streamer)

于 2013-08-30T10:33:39.823 回答
1

通常我们使用system("command");

将整个命令复制到字符串中让我们说str

./mjpg_streamer -i "./input_uvc.so -n -f 15 -r 1280x720" -o "./output_http.so -n -w ./www "

变成字符串然后使用

system(str); //in c code.
于 2013-08-30T10:23:24.067 回答
1
./mjpg_streamer -i "./input_uvc.so -n -f 15 -r 1280x720" -o "./output_http.so -n -w ./www "

pkill mjpg_stramer

你可以调用 pkill 使用system()

于 2013-08-30T10:26:59.747 回答