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

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

好像没有什么情况发生。

_> cat a.c
#include
#include

void stat(void)
{
printf("pid=%d, pgid=%d, sid=%d\n", getpid(), getpgid(0), getsid(0));
}

int main()
{
fork();
stat();
setpgid(0, 0);
stat();
pause();
}

setsid a
pid=17060, pgid=17060, sid=17060
pid=17060, pgid=17060, sid=17060
pid=17061, pgid=17060, sid=17060
pid=17061, pgid=17061, sid=17060

ps -j f
PID PGID SID TTY STAT TIME COMMAND
17060 17060 17060 ? Ss 0:00 ./a
17061 17061 17060 ? S 0:00 _ ./a

kill 17060

ps -j f
PID PGID SID TTY STAT TIME COMMAND
17061 17061 17060 ? S 0:00 ./a_

不好意思,说错了,应该是会成为orphan process group。如果已经处于STOP状态,会收到HUP+CONT信号。

#include
#include
#include

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

void show(void)
{
printf("pid=%d, ppid=%d, pgid=%d, sid=%d\n", 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