sid, pid, gid

(一)

参考 :https://unix.stackexchange.com/questions/18166/what-are-session-leaders-in-ps

命令: ps xao pid,ppid,pgid,sid,comm 显示所有ID,添加uid可以显示user id

或者名令:ps -eaf显示,usr,pid,ppid

 

leveldb@river:~/store$ ps xao pid,ppid,pgid,sid,comm
PID PPID PGID SID COMMAND
1    0    1 1   init
2    0    0 0   kthreadd
3    2    0 0   ksoftirqd/0
5    2    0 0   kworker/0:0H
7    2    0 0   rcu_sched
8    2    0 0   rcuos/0

问题:init进程的父进程id是0,这是什么进程?

答:https://unix.stackexchange.com/questions/83322/which-process-has-pid-0 。0号进程是swapper or sched,是一个内核的一部分,而非用户态进程。init进程是内核激发的第一个进程。

   2号进程父进程也是0,不是init进程是所有进程的祖宗吗?

答:2号进程也是由内核创建,和1号进程一起是两个直接由内核创建的进程。或者说,1号进程是所有用户进程的祖先,2号进程是所有内核进程的祖先。

  其他进程基本都是2号进程的子进程!?

 

(二)sid

session的概念。

一个进程调用了setsid()后,他就创建一个新的session,并成为这个新session的领导。但是一个group的领导是不能这样做的,因为这样的话,group的领导将他自己脱离了原来的session,加入了另一个session,这样两个session就有一个同样的group,这违背了原则。

所以,创建后台damon的通用做法是这样的。进程首先fork,fork后父进程退出,子进程称为了init的子进程,并不属于任何group的领导,但这时候子进程仍然处于当前terminal的session中,会随着terminal的关闭而关闭,如果此时子进程调用setsid()创建一个新的session,那么就会成为后台damon,不受当前terminal关闭的影响。

posted on 2017-04-24 22:34  longbigfish  阅读(372)  评论(0编辑  收藏  举报

导航