在C语言中优雅地提前退出派生的ffmpeg进程

在C语言中优雅地提前退出派生的ffmpeg进程,c,linux,video,ffmpeg,gtk3,C,Linux,Video,Ffmpeg,Gtk3,我有一个程序,其中我构建了一个ffmpeg命令字符串,以通过gtk3 gui输入选项来捕获视频。一旦选择了所有选项,我将使用ffmpeg命令字符串生成一个进程。我加了一块儿童手表,告诉我这个过程何时完成 // Spawn child process ret = g_spawn_async (NULL, argin, NULL, G_SPAWN_DO_NOT_REAP_CHILD, NULL, NULL, &pid1, NULL); if ( !ret ) { g

我有一个程序,其中我构建了一个ffmpeg命令字符串,以通过gtk3 gui输入选项来捕获视频。一旦选择了所有选项,我将使用ffmpeg命令字符串生成一个进程。我加了一块儿童手表,告诉我这个过程何时完成

  // Spawn child process 
  ret = g_spawn_async (NULL, argin, NULL, G_SPAWN_DO_NOT_REAP_CHILD, NULL, NULL, &pid1, NULL);
  if ( !ret )
  {
    g_error ("SPAWN FAILED");
    return;
  }

/* Add watch function to catch termination of the process.  This function
   * will clean any remnants of process */
  g_child_watch_add (pid1, (GChildWatchFunc)cb_child_watch, widget );
使用命令行从终端执行ffmpeg,程序将提供在终端输入“q”的选项,以提前结束ffmpeg过程。 有没有办法向生成的进程发送一个“q”来优雅地结束ffmpeg?我很确定我可以使用进程id终止进程,但我宁愿使用允许ffmpeg正常退出的机制来停止进程。。 这运行的是Centos 7、内核4.7.5、ffmpeg 3.0.2版。
因为我仍然可以访问显示ffmpeg输出的终端,所以我尝试键入一个“q”,但它对过程没有影响。

您可以尝试使用
kill
SIGTERM
而不是优雅地使用
q
。尽管ffmpeg可能不会立即停止,但这仍然可以让您优雅地关机。

您可以向PID发送终止信号,而不是终止信号。您可以尝试“q\n”@oldtechaa该建议似乎很有效,请回答,我将投赞成票。我在gtk中创建了一个暂停按钮,其中包含一个回调,该回调将生成一个C调用kill(pid,SIGTERM)。视频看起来都很好,这是我最关心的。@aergistal尽管我提到了在终端上打字,但我确实在寻找一种可以整合到C代码中的解决方案。有没有一种方法可以将“q/n”发送到我的流程,让ffmpeg优雅地结束?这个答案似乎非常有效。不幸的是,我没有足够的声誉来展示我的选票。但你解决了我的一个问题。谢谢如何从代码中停止FFmpeg执行?我不能终止进程,因为我的Android应用程序是进程,ffmpeg也使用这个进程(单独的线程)