childWatchSourceNew
Creates a new child_watch source.
The source will not initially be associated with any struct@GLib.MainContext and must be added to one with method@GLib.Source.attach before it will be executed.
Note that child watch sources can only be used in conjunction with g_spawn...
when the %G_SPAWN_DO_NOT_REAP_CHILD flag is used.
Note that on platforms where #GPid must be explicitly closed (see func@GLib.spawn_close_pid) @pid must not be closed while the source is still active. Typically, you will want to call func@GLib.spawn_close_pid in the callback function for the source.
On POSIX platforms, the following restrictions apply to this API due to limitations in POSIX process interfaces:
@pid must be a child of this process
@pid must be positive
the application must not call
waitpid
with a non-positive first argument, for instance in another threadthe application must not wait for @pid to exit by any other mechanism, including
waitpid(pid, ...)
or a second child-watch source for the same @pidthe application must not ignore
SIGCHLD
Before 2.78, the application could not send a signal (
kill()
) to the watched @pid in a race free manner. Since 2.78, you can do that while the associated struct@GLib.MainContext is acquired.Before 2.78, even after destroying the struct@GLib.Source, you could not be sure that @pid wasn't already reaped. Hence, it was also not safe to
kill()
orwaitpid()
on the process ID after the child watch source was gone. Destroying the source before it fired made it impossible to reliably reap the process.
If any of those conditions are not met, this and related APIs will not work correctly. This can often be diagnosed via a GLib warning stating that ECHILD
was received by waitpid
.
Calling waitpid
for specific processes other than @pid remains a valid thing to do.
Return
the newly-created child watch source
Since
2.4
Parameters
process to watch. On POSIX the positive pid of a child process. On Windows a handle for a process (which doesn't have to be a child).