擅长:python、mysql、java
<p>终端断开时发送SIGHUP。当您想创建一个不绑定到终端的进程时,您可以<a href="http://search.cpan.org/perldoc?Daemon::Daemonize" rel="nofollow">daemonize</a>它。在</p>
<hr/>
<p>请注意,<code>nohup</code>不会去元化。在</p>
<pre><code>$ nohup perl -e'system "ps", "-o", "pid,ppid,sid,cmd"'
nohup: ignoring input and appending output to `nohup.out'
$ cat nohup.out
PID PPID SID CMD
21300 21299 21300 -bash
21504 21300 21300 perl -esystem "ps", "-o", "pid,ppid,sid,cmd"
21505 21504 21300 ps -o pid,ppid,sid,cmd
</code></pre>
<p>如你所见</p>
<ol>
<li><code>perl</code>的PPID是启动它的程序的PPID。在</li>
<li><code>perl</code>的SID是启动它的程序的SID。在</li>
</ol>
<p>由于会话没有更改,当终端正常断开连接时,它将向<code>perl</code>发送SIGHUP。在</p>
<p>也就是说,<code>nohup</code>通过使SIGHUP被忽略而改变了{<cd2>}处理SIGHUP的方式。在</p>
^{pr2}$
<p>如果<code>perl</code>被信号杀死,那是因为某些东西改变了<code>perl</code>处理SIGHUP的方式。在</p>
<p>因此,要么对进程进行守护进程,要么让<code>perl</code>忽略use SIGHUP(例如,通过使用<code>nohup</code>)。但是如果使用<code>nohup</code>,不要重新启用默认的SIGHUP行为!在</p>