从 C 中生成的 ffmpeg 进程中优雅地提前退出

Elegant early exit from a spawned ffmpeg process in C

我有一个程序,我在其中构建了一个 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",但它对进程没有影响。

您可以尝试使用 killSIGTERM,而不是尝试优雅地使用 q。这仍然会提供您的正常关机,尽管它可能并不总是立即停止 ffmpeg。