函数
GLibchild_watch_source_new
自 2.4 起
声明 [src]
GSource*
g_child_watch_source_new (
GPid pid
)
描述 [src]
创建一个新的 child_watch 来源。
此来源最初不会与任何 GMainContext 联系,并且必须在使用 g_source_attach() 将其添加到其中后才会执行。
请注意,仅当使用 G_SPAWN_DO_NOT_REAP_CHILD 标志时,才能将子监视来源与 g_spawn... 结合使用。
请注意,在必须显式关闭 GPid 的平台上(参见 g_spawn_close_pid()),当来源仍然处于活动状态时,不得关闭 pid。通常,您需要在来源的回调函数中调用 g_spawn_close_pid()。
在 POSIX 平台上,由于 POSIX 进程接口的限制,以下限制适用于此 API:
pid必须是该进程的子进程pid必须为正数- 应用程序不得使用非正数作为第一个参数来调用
waitpid,例如,在另一个线程中 - 应用程序不得通过任何其他机制等待
pid退出,包括waitpid(pid, ...)或针对同一pid的第二个子监视来源 - 应用程序不得忽略
SIGCHLD - 在 2.78 之前,应用程序不能以无竞争的方式向受监视的
pid发送信号(kill())。自 2.78 起,当相关GMainContext被获取时,您可以这样做。 - 在 2.78 之前,即使在销毁
GSource之后,您也无法确定pid是否尚未回收。因此,在子监视来源消失后kill()或waitpid()进程 ID 也不安全。在来源触发之前销毁它使得可靠回收进程变得不可能。
如果不满足任何这些条件,那么此功能和相关 API 将无法正常工作。这通常可以通过一个 GLib 警告进行诊断,指出 waitpid 接收到了 ECHILD。
针对 pid 以外的特定进程调用 waitpid 仍然是有效的操作。
自 2.4 起提供
参数
pid-
类型:
GPid要监视的进程。在 POSIX 上为子进程的正 pid。在 Windows 上为进程的句柄(不必是子进程)。
返回值
类型: GSource
新创建的子监视来源。
| 函数的调用方将拥有这些数据的权限,并且负责释放它们。 |