【问题标题】:A function that accept a pid and returns its mode [closed]接受pid并返回其模式的函数[关闭]
【发布时间】:2016-04-28 23:56:43
【问题描述】:

我正在寻找一个接受 pgid(进程组 ID)并返回该进程组是运行还是停止的 C 函数。

【问题讨论】:

    标签: process signals system-calls


    【解决方案1】:

    一般方法是将waitpid()WNOHANG 选项一起使用。 waitpid(pid, &status, WNOHANG) 等待由pid 标识的子进程或进程组更改状态。

    如果没有WNOHANG 选项,该函数将阻塞调用进程,直到进程组更改状态。包含该选项可确保 waitpid 在没有子级更改状态时返回 0 的值。 (如果状态发生变化,该函数返回pid。)您可以检查不同的状态变化,例如终止、捕捉停止信号、捕捉恢复信号等。

    pid_t pid, w;
    int   status;
    
    /* A call to fork, perhaps
     * (pid is set to child's)
     */
    
    /* Parent can check for child's termination */
    w = waitpid(pid, &status, WNOHANG);
    
    if (w == -1)
        handle_error("waitpid_error");
    
    if (w == 0)
        printf("child still running\n");
    else
        printf("child exited\n");
    

    请注意,如果子进程终止,则对 waitpid 的调用将获取子进程。

    【讨论】:

    • 但是这个想法的问题是,如果我得到一个我不确定它是否有子进程的进程,使用 waitpid() 和 WNOHANG 将终止它的一个子进程。我正在寻找一个更通用的解决方案,这将帮助我在不终止任何子流程的情况下获得每个流程的答案。
    • 我不太确定你想做什么。 waitpid 不会以任何方式影响任何目标进程(除非它们自行终止),它只会获取有关它们的信息。我进行了一些搜索,如果您使用的是 Linux 系统并想要潜在的替代方案,您可能需要查看 /proc
    猜你喜欢
    • 2018-06-12
    • 2011-05-12
    • 1970-01-01
    • 2021-03-23
    • 1970-01-01
    • 2018-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多