/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 运行的进程不受 SIGHUP(挂起)和 SIGQUIT(退出)信号影响。
使 ID 指定的进程不受 SIGHUP 和 SIGQUIT 影响,并且将控制终端的所有输出重定向到 nohup.out。如果指定 –F,nohup 会强制控制每个进程。如果指定 –a,nohup 会更改 SIGHUP 和 SIGQUIT 的信号处理,即便进程已为任一信号安装了处理程序。
使与 ID 指定的进程同属一个进程组的每个进程都不受 SIGHUP 和 SIGQUIT 影响,并且将控制终端的所有输出重定向到 nohup.out。如果指定 –F,nohup 会强制控制每个进程。如果指定 –a,nohup 会更改 SIGHUP 和 SIGQUIT 的信号处理,即便进程已为任一信号安装了处理程序。
/usr/xpg4/bin/nohup 运行的进程不受 SIGHUP 影响。
nohup 实用程序不会安排进程不受 SIGTERM(终止)信号影响,因此,除非安排它们不受 SIGTERM 影响,或者 shell 使它们不受 SIGTERM 影响,否则它们会收到此信号。
如果 nohup.out 不可在当前目录中写入,系统会将输出重定向到 $HOME/nohup.out。如果创建了文件,此文件将具备读取和写入权限(600)。请参见 chmod(1)。如果标准错误为终端,系统会将其重定向到标准输出,否则不会重定向。nohup 运行的进程的优先级不会改变。
支持以下选项:
总是改变目标进程的信号处理。此选项仅在指定了 –p 或 –g 时有效。
强制。抓取目标进程,即使另一进程已掌握了控制权。此选项仅在指定了 –p 或 –g 时有效。
对进程组列表执行操作。此选项对 –p 无效。
对进程列表执行操作。使用 –g 时此选项无效。
支持下列操作数:
要由 nohup –p 操控的十进制进程 ID。
要由 nohup –g 操控的十进制进程组 ID。
要调用的命令的名称。如果 command 操作数指定了任何特殊的 shell_builtins(1) 实用程序,将会产生无法预料的结果。
调用 command 操作数时作为参数提供的任何字符串。
使用 –F 标志时应谨慎。在一个被调试的进程上施加两个控制进程可能会导致混乱。仅当主控制进程(通常是调试器)已停止了被调试的进程,并且在应用 proc 工具的可疑时刻主控制进程未在执行任何操作,才能保证安全。
用户往往需要将 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)。
确定用户起始目录的路径名:如果不能在当前目录中创建输出文件 nohup.out,nohup 命令会使用 HOME 指定的目录创建该文件。
将返回以下退出值:
找到了 command,但无法调用。
nohup 中发生错误,或者找不到 command
否则,nohup 退出值即为 command 操作数的退出值。
标准输出为终端并且当前目录可写入时执行 nohup 的输出文件。
标准输出为终端并且当前目录不可写入时执行 nohup 的输出文件。
有关下列属性的说明,请参见 attributes(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)
的语法错误。