当前位置: 技术问答>linux和unix
关于setsid的问题
来源: 互联网 发布时间:2017-01-14
本文导语: 在网上看到一篇文章,有下面一段程序,看了后有点不解 pid_t pid = fork(); if (pid == 0) { ... int result = execl(path, "adb", "fork-server", "server", NULL); } else { // run a program in a new...
在网上看到一篇文章,有下面一段程序,看了后有点不解
pid_t pid = fork();
if (pid == 0) {
...
int result = execl(path, "adb", "fork-server", "server", NULL);
} else {
// run a program in a new session
setsid();//之前parent和child运行在同一个session里,而且parent是session头,
//所以作为session头的parent如果exit结束执行的话,那么会话session组中的所有进程将都被杀死;
//所以执行setsid()之后,parent将重新获得一个新的会话session组id,child将仍持有原有的会话session组,
//这时parent退出之后,将不会影响到child了。
}
parent是session头,那么它也就是进程组中的组长进程,那这样的用法是不是有错误啊
pid_t pid = fork();
if (pid == 0) {
...
int result = execl(path, "adb", "fork-server", "server", NULL);
} else {
// run a program in a new session
setsid();//之前parent和child运行在同一个session里,而且parent是session头,
//所以作为session头的parent如果exit结束执行的话,那么会话session组中的所有进程将都被杀死;
//所以执行setsid()之后,parent将重新获得一个新的会话session组id,child将仍持有原有的会话session组,
//这时parent退出之后,将不会影响到child了。
}
parent是session头,那么它也就是进程组中的组长进程,那这样的用法是不是有错误啊
|
是啊,应该是子进程setsid让自己作为一个新的会话首进程,sid==孩子的pid。
|
不对吧,应该是自子进程执行setsid吧
|
通常都是子进程执行setsid(),脱离父进程的进程组,自成一家