The source will not initially be associated with any
GLib.MainContext and must be added to one with
GLib.Source.attach before it will be executed.
Note that child watch sources can only be used in conjunction with
g_spawn... when the GLib.SpawnFlags.DO_NOT_REAP_CHILD flag is used.
Note that on platforms where GLib.Pid must be explicitly closed
(see GLib.spawn_close_pid) pid must not be closed while the
source is still active. Typically, you will want to call
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 thread.
The application must not wait for pid to exit by any other
mechanism, including waitpid(pid, ...) or a second child-watch
source for the same pid.
The 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 GLib.MainContext is acquired.
Before 2.78, even after destroying the GLib.Source, you could not
be sure that pid wasn’t already reaped. Hence, it was also not
safe to kill() or waitpid() 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.
Parameters
pid: number
process to watch — on POSIX systems, this is the positive PID of a child process; on Windows it is a handle for a process (which doesn’t have to be a child)
Creates a new child watch source.
The source will not initially be associated with any GLib.MainContext and must be added to one with GLib.Source.attach before it will be executed.
Note that child watch sources can only be used in conjunction with
g_spawn...when the GLib.SpawnFlags.DO_NOT_REAP_CHILD flag is used.Note that on platforms where GLib.Pid must be explicitly closed (see GLib.spawn_close_pid)
pidmust not be closed while the source is still active. Typically, you will want to call 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:
pidmust be a child of this process.pidmust be positive.waitpid()with a non-positive first argument, for instance in another thread.pidto exit by any other mechanism, includingwaitpid(pid, ...)or a second child-watch source for the samepid.SIGCHLD.kill()) to the watchedpidin a race free manner. Since 2.78, you can do that while the associated GLib.MainContext is acquired.pidwasn’t already reaped. Hence, it was also not safe tokill()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
ECHILDwas received bywaitpid().Calling
waitpid()for specific processes other thanpidremains a valid thing to do.