手册页部分 1: 用户命令

退出打印视图

更新时间: 2014 年 7 月
 
 

nohup(1)

名称

nohup - 运行不受挂起影响的命令

用法概要

/usr/bin/nohup command [argument]...
/usr/bin/nohup -p [-Fa] pid [pid]...
/usr/bin/nohup -g [-Fa] gpid [gpid]...
/usr/xpg4/bin/nohup command [argument]...

描述

nohup 实用程序会调用提供了参数的指定 command。调用 command 时,nohup 会安排进程忽略 SIGHUP 信号。

如果调用时使用了 –p–g 标志,nohup 会安排由进程 ID 列表或进程组 ID 列表标识的已运行进程变得不受挂起影响。

已知 command 需要运行很长时间并且用户希望退出终端时,可以使用 nohup 实用程序。shell 退出时,系统会向其子进程发送 SIGHUP 信号,缺省情况下,这会导致这些进程中止。如果调用作业时在前面加上了 nohup 命令,或者如果进程通过编程的方式选择忽略 SIGHUP,所有已停止作业、正在运行的作业和后台作业都会忽略 SIGHUP。

nohup 实用程序会使进程忽略 SIGHUP,但不会以任何方式保护这些进程不受其他信号影响。由于现代 shell 有时会在注销时发送除 SIGHUP 以外的信号,因此在 /usr/bin/nohup 下运行的作业有可能在控制 shell 退出时中止。

/usr/bin/nohup

/usr/bin/nohup 运行的进程不受 SIGHUP(挂起)和 SIGQUIT(退出)信号影响。

/usr/bin/nohup –p [–Fa]

使 ID 指定的进程不受 SIGHUP 和 SIGQUIT 影响,并且将控制终端的所有输出重定向到 nohup.out。如果指定 –Fnohup 会强制控制每个进程。如果指定 –anohup 会更改 SIGHUP 和 SIGQUIT 的信号处理,即便进程已为任一信号安装了处理程序。

/usr/bin/nohup –g [–Fa]

使与 ID 指定的进程同属一个进程组的每个进程都不受 SIGHUP 和 SIGQUIT 影响,并且将控制终端的所有输出重定向到 nohup.out。如果指定 –Fnohup 会强制控制每个进程。如果指定 –anohup 会更改 SIGHUP 和 SIGQUIT 的信号处理,即便进程已为任一信号安装了处理程序。

/usr/xpg4/bin/nohup

/usr/xpg4/bin/nohup 运行的进程不受 SIGHUP 影响。

nohup 实用程序不会安排进程不受 SIGTERM(终止)信号影响,因此,除非安排它们不受 SIGTERM 影响,或者 shell 使它们不受 SIGTERM 影响,否则它们会收到此信号。

如果 nohup.out 不可在当前目录中写入,系统会将输出重定向到 $HOME/nohup.out。如果创建了文件,此文件将具备读取和写入权限(600)。请参见 chmod(1)。如果标准错误为终端,系统会将其重定向到标准输出,否则不会重定向。nohup 运行的进程的优先级不会改变。

选项

支持以下选项:

–a

总是改变目标进程的信号处理。此选项仅在指定了 –p–g 时有效。

–F

强制。抓取目标进程,即使另一进程已掌握了控制权。此选项仅在指定了 –p–g 时有效。

–g

对进程组列表执行操作。此选项对 –p 无效。

–p

对进程列表执行操作。使用 –g 时此选项无效。

操作数

支持下列操作数:

pid

要由 nohup –p 操控的十进制进程 ID。

pgid

要由 nohup –g 操控的十进制进程组 ID。

command

要调用的命令的名称。如果 command 操作数指定了任何特殊的 shell_builtins(1) 实用程序,将会产生无法预料的结果。

argument

调用 command 操作数时作为参数提供的任何字符串。

用法

使用 –F 标志时应谨慎。在一个被调试的进程上施加两个控制进程可能会导致混乱。仅当主控制进程(通常是调试器)已停止了被调试的进程,并且在应用 proc 工具的可疑时刻主控制进程未在执行任何操作,才能保证安全。

示例

示例 1 nohup 应用到管道或命令列表

用户往往需要将 nohup 应用到管道或命令列表。为此,可以将管道和命令列表放在一个称作 shell 脚本的文件中。接着,用户可以发出:

example$ nohup sh file

此时便会将 nohup 应用到 file 中的全部内容。如果要经常执行 shell 脚本 file,则可以为 file 授予执行权限,从而避免键入 sh

添加和符号时,file 中的内容会在后台运行,同时忽略中断(请参见 sh(1)):

example$ nohup file &
示例 2 nohup -p 应用到进程
example$ long_running_command &
example$ nohup -p `pgrep long_running_command`
示例 3 nohup -g 应用到进程组
example$ make &
example$ ps -o sid -p $$
   SID
81079
example$ nohup -g `pgrep -s 81079 make`

环境变量

有关影响 nohup 执行的 LANG、LC_ALL、LC_CTYPE、LC_MESSAGES、PATH、NLSPATH 和 PATH 环境变量的描述,请参见 environ(5)

HOME

确定用户起始目录的路径名:如果不能在当前目录中创建输出文件 nohup.outnohup 命令会使用 HOME 指定的目录创建该文件。

退出状态

将返回以下退出值:

126

找到了 command,但无法调用。

127

nohup 中发生错误,或者找不到 command

否则,nohup 退出值即为 command 操作数的退出值。

文件

nohup.out

标准输出为终端并且当前目录可写入时执行 nohup 的输出文件。

$HOME/nohup.out

标准输出为终端并且当前目录不可写入时执行 nohup 的输出文件。

属性

有关下列属性的说明,请参见 attributes(5)

/usr/bin/nohup

属性类型
属性值
可用性
system/core-os
CSI
Enabled(已启用)

/usr/xpg4/bin/nohup

属性类型
属性值
可用性
system/xopen/xcu4
CSI
Enabled(已启用)
接口稳定性
Committed(已确定)
标准
请参见 standards(5)

另请参见

bash(1)、batch(1)chmod(1)csh(1)disown(1)ksh88(1)nice(1)pgrep(1)proc(1)ps(1)sh(1)shell_builtins(1)setpgrp(1)signal(3C)proc(4)attributes(5)environ(5)standards(5)

警告

如果正在将 Korn shell (ksh88(1)) 作为登录 shell 运行,并且尝试退出时系统中含有运行了 nohup 的作业,您会收到一条警告消息:

You have jobs running.

此时,您需要再次退出才能真正退出。不过,后台作业会继续运行。

附注

C-shell (csh(1)) 含有内置的 nohup 命令,该命令可以让进程不受 SIGHUP 影响,但不会将输出重定向到 nohup.out。执行时指定了 "&" 的命令能够自动避免受到 HUP 信号的影响,同时又会在后台运行。

nohup 不能识别命令序列。执行以下命令时:

example$ nohup command1; command2

nohup 实用程序仅应用于 command1。命令:

example$ nohup (command1; command2)

的语法错误。