我有这样的命令:
./mjpg_streamer -i "./input_uvc.so -n -f 15 -r 1280x720" -o "./output_http.so -n -w ./www "
用于通过以太网流式传输视频。目前我正在通过终端运行,退出时我只需按Ctrl+c。但我需要使用 c 代码来做到这一点。是否有可能或任何其他可用的方法?
谢谢。
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
失败,您将有两个进程在您手中做同样的事情。这是一个故障保险。
我希望这有帮助。
当你执行system(./mjpg_streamer)
创建了一个用户进程 mjpg_streamer
您可以再次终止此过程pkill(mjpg_streamer)
通常我们使用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.
./mjpg_streamer -i "./input_uvc.so -n -f 15 -r 1280x720" -o "./output_http.so -n -w ./www "
pkill mjpg_stramer
你可以调用 pkill 使用system()