I have a program where I build an ffmpeg command string to capture videos with options input through a gtk3 gui. Once I have all my options selected, I spawn a process with the ffmpeg command string. And I add a child watch to tell me when the process has completed.
// 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");
/* 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 );
You could, instead of trying to gracefully use
q, try using
kill and a
SIGTERM. This would still offer your graceful shutdown, although it may not always stop ffmpeg immediately.