C++ 使用fork()和execl()创建两个子进程
我正在尝试fork()一个进程,并让它执行ffmpeg屏幕录制(使用SIGINT停止)。 我编写了一个popen2()函数,它forks()然后调用execl(),如下所示。但是使用这个我不能杀死fork'ed进程,因为我在ps中看到了2个子进程C++ 使用fork()和execl()创建两个子进程,c++,c,linux,fork,exec,C++,C,Linux,Fork,Exec,我正在尝试fork()一个进程,并让它执行ffmpeg屏幕录制(使用SIGINT停止)。 我编写了一个popen2()函数,它forks()然后调用execl(),如下所示。但是使用这个我不能杀死fork'ed进程,因为我在ps中看到了2个子进程 4508 744 pts/0 S+ 12:53 0:00 sh -c ffmpeg -video_size 1024x768 -framerate 20 -f x11grab -i :0.0 abcd.mp4 1883
4508 744 pts/0 S+ 12:53 0:00 sh -c ffmpeg -video_size 1024x768 -framerate 20 -f x11grab -i :0.0 abcd.mp4
1883 696608 pts/0 Rl+ 12:53 0:52 ffmpeg -video_size 1024x768 -framerate 20 -f x11grab -i :0.0 abcd.mp4
这是我正在使用的popen2()函数,它返回fork'ed进程的PID
pid_t popen2()
{
const pid_t pid = fork();
if (pid == 0)
{
execl("ffmpeg", "-video_size 1024x768 -framerate 20 -f x11grab -i : 0.0", NULL);
exit(1);
}
// parent process.
return pid;
}
会话结束后,我会在父进程中杀死它
const auto wait_result = waitpid(screen_recorder_pid_, &status, WNOHANG);
// child is still running, kill.
if (wait_result == 0)
{
const auto kill_result = kill(screen_recorder_pid_, SIGINT);
}
我的问题是
ffmpeg
是shell脚本还是缺少可执行权限?如果您尝试:execl(“ffmpeg”,“ffmpeg”,“视频大小”,“1024x768”,“帧速率”,“20”,“f”,“x11grab”,“i”,“0.0”,NULL),该怎么办代码>?(而且:
真的应该从0.0
和-
从i
?)中分离出来吗?@Alanffmpeg
是一个二进制可执行文件,而不是shell脚本。@kode18“我如何从父进程中终止进程?”使用SIGKILL
,而不是SIGINT
@πάταῥεῖ 通常是的,没有什么可以阻止您创建名为ffmpeg
的shell脚本,然后调用可执行文件