擅长:python、mysql、java
<p>我正试着去理解双叉,无意中发现了这个问题。经过大量的研究,我发现了这一点。希望这将有助于澄清更好的任何人谁有相同的问题。</p>
<p>在Unix中,每个进程都属于一个组,而这个组又属于一个会话。这是层次结构</p>
<p>会话(SID)→进程组(PGID)→进程(PID)</p>
<p>流程组中的第一个流程成为流程组领导,会话中的第一个流程成为会话领导。每个会话都可以有一个与之关联的TTY。只有会话负责人才能控制TTY。要使进程真正被守护(在后台运行),我们应该确保会话领导者被杀死,这样会话就不可能控制TTY。</p>
<p>我在Ubuntu上运行Sander Marechal的python示例守护程序。以下是结果和我的评论。</p>
<pre class="lang-none prettyprint-override"><code>1. `Parent` = PID: 28084, PGID: 28084, SID: 28046
2. `Fork#1` = PID: 28085, PGID: 28084, SID: 28046
3. `Decouple#1`= PID: 28085, PGID: 28085, SID: 28085
4. `Fork#2` = PID: 28086, PGID: 28085, SID: 28085
</code></pre>
<p>请注意,进程是<code>Decouple#1</code>之后的会话负责人,因为它是<code>PID = SID</code>。它仍然可以控制TTY。</p>
<p>注意<code>Fork#2</code>不再是会话领导者<code>PID != SID</code>。这个过程永远无法控制TTY。<em>真正的守护。</em></p>
<p>我个人认为术语叉子有两次让人困惑。一个更好的习惯用法可能是fork decouple fork。</p>
<p>其他感兴趣的链接:</p>
<ul>
<li>Unix进程-<a href="http://www.win.tue.nl/~aeb/linux/lk/lk-10.html" rel="noreferrer">http://www.win.tue.nl/~aeb/linux/lk/lk-10.html</a></li>
</ul>