Если вы подразумеваете под «когда этот дочерний процесс запущен, основная родительская программа GTK ожидает», означает, что ваш код выполняет wait (), waitid (), waitpid () в своем основномпотоком, тогда приложение действительно приостановит выполнение до тех пор, пока дочерний процесс не прекратится (если вы не выбрали опцию NOHANG).
Если вашему приложению Gtk не нужно дополнительно координировать свои действия с программой-поиском, просто используйте ранееупомянутая g_spawn_command_line_async подпрограмма, и не устанавливайте G_SPAWN_DO_NOT_REAP_CHILD.Если вам нужно координировать, вы можете установить этот флаг и создать источник GChildWatch или, возможно, использовать одну из подпрограмм канала g_spawn.
Как я интерпретирую gdk_thread_enter () / оставьте () , они блокируют или разблокируют потоки, а не запускают или останавливают новые потоки.Обратные вызовы Gtk выполняются в главном потоке, поэтому, как указано выше, блокирующий waitpid () в обратном вызове повесит приложение Gtk.Однако неблокирующая функция waitpid () в обратном вызове таймера (например) не является проблемой.