Function glib::source::child_watch_source_new [−][src]
pub fn child_watch_source_new<F>(
pid: Pid,
name: Option<&str>,
priority: Priority,
func: F
) -> Source where
F: FnMut(Pid, i32) + Send + 'static,
Expand description
Adds a closure to be called by the main loop the returned Source
is attached to when a child
process exits.
func
will be called when pid
exits
Creates a new child_watch source.
The source will not initially be associated with any MainContext
and must be added to one with g_source_attach()
before it will be
executed.
Note that child watch sources can only be used in conjunction with
g_spawn...
when the SpawnFlags::DO_NOT_REAP_CHILD
flag is used.
Note that on platforms where GPid
must be explicitly closed
(see g_spawn_close_pid()
) pid
must not be closed while the
source is still active. Typically, you will want to call
g_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 processpid
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, includingwaitpid(pid, ...)
or a second child-watch source for the samepid
- the application must not ignore
SIGCHLD
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.
pid
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).
Returns
the newly-created child watch source