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 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

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