Nohup

nohup  是一个 POSIX 命令，用于忽略 SIGHUP ("signal hang up" 译：挂断信号) 。 SIGHUP信号是终端注销时所发送至程序的一个信号。

nohup命令，在默认情况下（非重定向时），会输出一个名叫 nohup.out 的文件到终端上。

实例 
下例中，nohup用于忽略SIGHUP信号，&使命令于后台执行，因此终端退出后命令仍旧执行。$ nohup 命令名 &值得注意，这种方法防止命令在注销时被忽略SIGHUP信号，但，如果该命令对 标准I/O文件（stdin,stdout，或stderr）进行输入/输出，那么该命令仍旧可能被终端挂起。 详情请看下文的 阻止挂起 。

另外，nohup 命令常常和nice命令一起执行，以调整命令/程序的优先级。$ nohup nice 命令 &

相关命令 
一些shell（如 Bash）提供一个 shell builtin ，可用于防止发送 SIGHUP 而影响现有的jobs，即使没使用 nohup命令。

disown 
在Bash，可以通过disown -h job名忽略 SIGHUP 信号；disown命令将移除job表中特定的job，这也意味着该job不再接受任何信号。

Control-Z
通过  可以将当前进程挂起（放置后台并暂停运行），可通过 fg 命令恢复至前台，也通过bg将挂起的进程后台运行。

shopt 
shopt huponexit命令让Bash在登录用的shell退出时，发送SIGHUP信号至所有的jobs。

需注意的是，在使用 AIX 和 Solaris 系统的nohup必须添加 p 选项。不同于上述bash内置命令disown，nohup -p 使用的是进程ID。

阻止挂断 
注意，即便远程SSH会话注销或断开时，已经nohup且在后台job可以避免被中止。

另一个常见的问题是，SSH会话常常拒绝注销（或者挂起），因为它不愿意去丢失与后台job(s)进行交互的数据。 该问题可通过 重定向 三次I/O流解决：待考证$ nohup ./myprogram > foo.out 2> foo.err < /dev/null &同时需要注意，关闭SSH会话不意味着会发送SIGHUP信号至对应程序。 除此以外，还取决于 伪终端 是否被分配。

替代品 

 一个 终端复用器（terminal multiplexer ） 可以执行命令于一个单独的会话，该会话是分离当前的终端的，这意味着如果当前终端结束后，分离的会话以及其关联程序仍保持运行。 之后，一个新的终端可以和该会话连接。

 例如，下例调用了 screen 将会运行"somescript.sh"于后台的一个独立的会话中：
$ screen -A -m -d -S somename ./somescript.sh &

 disown 的命令是用于清除job表中的jobs，或者标记jobs，以便在会话结束时不发送SIGHUP信号至标记了的jobs。

参考文献

外部链接 

 必须被显从Solaris的人页
 Linux 技巧：让进程在后台运行更可靠的几种方法

Unix SUS2008实用工具