nohup 命令和 & 符号在 Linux 和 Unix 系统中都用于在后台运行程序,但它们的用途和工作方式有所不同。
nohup 是 “no hang up” 的缩写,意味着即使终端关闭,程序也会继续运行。nohup 运行的程序会忽略挂起(SIGHUP)信号,这是通常在终端关闭时发送给进程的信号,用于通知进程终止。nohup 通常与输出重定向一起使用,以便将程序的输出保存到文件中,而不是显示在终端上。例如:nohup myprogram > output.log 2>&1 &。nohup 运行的程序会在当前目录下创建一个名为 nohup.out 的文件,用于存储程序的输出,除非指定了其他输出文件。& 符号用于将命令放入后台运行,这意味着你可以在不等待命令完成的情况下继续在终端中执行其他命令。& 符号时,该命令会在后台启动,并且终端会立即返回提示符,允许你执行其他命令。& 符号运行的程序仍然会受到挂起信号的影响,如果终端关闭,程序可能会被终止。& 符号本身不提供任何保护机制来防止程序在终端关闭时终止。总结:
nohup 命令,并且通常还需要将输出重定向到文件。& 符号。在实际使用中,这两个工具经常结合使用,例如:nohup myprogram > output.log 2>&1 &,这样程序会在后台运行,忽略挂起信号,并将标准输出和标准错误输出都重定向到 output.log 文件中。