开发者社区> 问答> 正文

linux会话结束时进程关系变化

一个会话里有多个进程组运行着,当会话首进程(可能是login shell)
终止(可能是被kill或shell退出引起),那么此时该会话里的进程会怎样,会收到
哪些信号,是否全程成为孤进程组?

展开
收起
杨冬芳 2016-07-11 17:38:57 2033 0
1 条回答
写回答
取消 提交回答
  • IT从业

    应该是会成为orphan process group。如果已经处于STOP状态,会收到HUP+CONT信号。

    include

    include

    include

    void sig(int nr)
    {
    printf("%d: got %dn", getpid(), nr);
    }

    void show(void)
    {
    printf("pid=%d, ppid=%d, pgid=%d, sid=%dn", getpid(), getppid(), getpgid(0), getsid(0));
    }

    int main()
    {
    signal(SIGHUP, sig);
    fork();
    show();
    setpgid(0, 0);
    show();
    kill(getpid(), SIGTSTP);
    perror("kill");
    show();
    }

    setsid a
    pid=19464, ppid=1, pgid=19464, sid=19464
    pid=19464, ppid=1, pgid=19464, sid=19464
    pid=19465, ppid=19464, pgid=19464, sid=19464
    pid=19465, ppid=19464, pgid=19465, sid=19464
    kill: Operation not permitted
    pid=19464, ppid=1, pgid=19464, sid=19464
    19465: got 1 <------------------- here
    kill: Success
    pid=19465, ppid=1, pgid=19465, sid=19464

    2019-07-17 19:54:28
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Alibaba Cloud Linux 3 发布 立即下载
ECS系统指南之Linux系统诊断 立即下载
ECS运维指南 之 Linux系统诊断 立即下载