为什么我们需要为守护进程创建一个新会话?

时间:2013-11-02 20:50:28

标签: linux daemon

编写守护程序时,需要为它创建一个新会话。

例如:

 fork a child process
 exit main process
 call setsid in child process

我想知道为什么我们需要为它创建一个新的会话?

我们可以把它放到后台
$myserver&

由于

1 个答案:

答案 0 :(得分:2)

当您在xterm中使用myprog &在后​​台启动程序时,如果在没有命令退出的情况下关闭xterm,程序将被终止。创建一个新的会话可能会解决这个问题(该过程是xterm的子进程,当你创建一个新的会话时,他不是xterm的子进程。你可以在不退出的情况下关闭xterm,程序仍然会运行)。 / p>

man 2 setsid给出:

setsid()  creates  a new session if the calling process is not a process group leader. 

The calling process is the leader of the new session, the process group leader of the new 
process group, and has no controlling terminal. 

The process group ID and session ID of the calling process are set to the PID of 
the calling process.

The calling process will be the only process in this new process group and in 
this new session.

我给你的xterm示例是has no controlling terminal