Re: Using fork() in a GTK C/Vala application



On Tue, 1 Sep 2015 13:54:34 +0200
rastersoft <raster rastersoft com> wrote:
Hi all:

I'm working on a project which, for several reasons, will use the
Posix fork() call. The question is: if I have an active GTK main loop
in the program before calling fork(), is there something I have to do
after calling it in the child process? I know that I must NOT use Gtk
calls in the child, but should I quit the main loop in the child?
Should I quit before the Gtk main loop, create the child, and call it
again? What can I do to don't loose registered callbacks and so on?

Because of gio, which uses background threads for some of its stuff
(in particular for its async i/o operations) all GTK+ programs are in
effect multi-threaded nowadays.  This makes calling fork() problematic,
because as you probably know POSIX only permits async-signal-safe
functions to be called after a fork() and before an exec() in a
multi-threaded program.  If you want to do anything other than a fork()
and an exec(), then start a thread not a new process.  This leaves your
question redundant.

For asynchronous tasks you might want to look at GTask (available from
glib-2.36).  For an encapsulation of the fork()/exec() approach, see
also GSubProcess, available from glib-2.40.

Chris


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]