在Linux系统中,nohup
是一个命令行工具,其全称是 “no hang up”(不挂断)。其主要作用是允许用户在一个终端会话中启动一个命令或程序,使得该命令或程序能够忽略挂断(SIGHUP)信号,并在用户退出终端(如关闭窗口、断开SSH连接)或注销账户后继续在后台运行。以下是nohup
命令的核心特性与作用:
-
忽略挂断信号(SIGHUP):
当用户退出终端或网络连接中断时,系统通常会向在该终端下运行的进程发送SIGHUP信号,通知它们终端已断开。接收到SIGHUP信号的进程通常会选择结束运行。nohup
命令通过阻止这种信号传递给指定的命令,确保进程不受用户终端会话状态变化的影响,继续保持运行。 -
后台运行:
nohup
命令通常与命令末尾的&
符号一起使用,将命令放入后台执行。这样,命令的执行不会阻塞用户的终端,用户可以继续在同一个终端中执行其他命令或关闭终端而不影响已启动的后台进程。 -
重定向输出:
使用nohup
运行的命令,其标准输出(stdout)和标准错误输出(stderr)默认会被重定向到一个名为nohup.out
的文件中(位于当前工作目录)。这有助于捕获进程在后台运行期间产生的输出,便于后续查看。用户也可以自定义重定向目标,如nohup command > output.log 2>&1
,将输出和错误信息合并并保存到指定的output.log
文件中。 -
适用于长时间运行任务:
nohup
特别适用于启动那些预计运行时间较长、无需用户交互且不应因终端关闭而中断的任务,如批量数据处理、持续的日志分析、长时间运行的脚本、定时任务备份等。
基本用法:
nohup command [arguments] &
例如,要使用nohup
在后台运行一个名为long_running_script.sh
的脚本,并将输出重定向到默认的nohup.out
文件,可以执行:
nohup ./long_running_script.sh &
总结来说,nohup
命令在Linux环境中为用户提供了一种便捷的方式来启动能在用户退出终端后继续在后台运行的命令或脚本,确保这些任务不会因用户的临时离线而中断,并通过重定向输出方便用户事后检查进程运行情况。这对于远程服务器管理、自动化任务调度以及长时间无人值守的计算任务尤为重要。