详解Linux中nohup和&的用法和区别

在Linux系统中,nohup 和 & 这两个命令用于不同的后台处理需求,各自具有独特的功能和应用场景。

使用 & 可以将命令放到后台执行,执行中的输出会继续显示在当前的终端上,但进程已经脱离了前台。
需要注意的是,这个进程仍然会受到前台的控制,比如使用 Ctrl+C 可以直接终止该进程。
当终端会话关闭时,这个后台进程也会随之终止。

nohup 命令则是在后台执行命令的同时,忽略挂起信号(SIGHUP)。
这意味着即便关闭了终端,进程依然能够继续运行。
nohup 的输出默认被重定向到 nohup.out 文件中,除非指定了其他的输出文件。

当 nohup 和 & 结合使用时,可以得到一个既能在后台运行,又能抵抗挂起信号干扰的进程。
这样的组合使得进程的输出依然被重定向到 nohup.out 文件中,而且进程既不会因用户在中断信号 Ctrl+C 下直接关闭,也不会因为会话的结束而立即停止,这对于需要长时间运行且稳定性要求较高的任务非常有利。

总结来说,单独使用 & 适合那些在后台运行但不需担心会话结束后进程是否继续工作的场景;nohup 则适合需要后台运行且希望会话结束后仍能持续工作的场景;而 nohup 与 & 的结合使用,适合需要后台运行且希望进程不受 Ctrl+C 或会话关闭影响的场景。

Linux的nohup命令

Linux系统中的nohup命令能够有效屏蔽断开信号,使得应用程序能够在后台稳定运行,即便用户登出系统,程序也能继续执行。
以下是nohup命令的详细说明:

功能特性:
忽略断开信号:nohup命令确保应用程序在用户登出或终端关闭时依然能够继续运行。

后台运行:通过在命令末尾添加“&”符号,nohup命令能够使应用程序在后台运行。

输出重定向:默认输出至文件:nohup命令默认将输出重定向到当前目录下的“nohup.out”文件。

与“&”的区别:持续运行:nohup命令保证了用户退出账户后程序的持续运行,而“&”仅将程序置于后台,不能确保用户登出后程序的持续性。

相关命令:
jobs命令:用于查看当前shell中的后台任务,包括任务ID、状态和命令。

fg命令:可以将后台任务切换到前台继续执行。

Ctrl+Z键:暂停后台任务的执行,配合bg命令可恢复执行。

kill命令:终止特定的后台任务。

disown命令:终止所有后台任务,但通常较少使用,因为nohup已确保程序的持续运行。


总结:nohup命令是Linux系统中一款极为实用的工具,它允许用户在注销或关闭终端的情况下,继续运行特定的程序。
结合“&”符号和输出重定向功能,nohup为后台任务的稳定执行提供了强大的支持。

Linux的nohup命令

nohup指令用于启动后台进程,并能无视中断信号,确保即便用户离线,程序也能持续运行。
执行nohup命令时,只需在命令末尾添加"&&",即可将任务置于后台执行,其输出会自动保存到"nohup.out"文件中。
nohup的特点在于它保证了程序的持续运行,不受用户会话的影响,而"&&"则仅仅意味着任务在后台运行。
若要将shtest.sh任务放入后台,并保留标准输入、输出及错误至当前目录的nohup.out文件,只需在命令后加"&&"即可。
通过jobs命令,可以监控当前shell中的后台任务,包括任务标识、状态和具体命令。
若要查看任务执行状态,如“Running”即表示任务正在后台运行。
若需将后台任务带回前台执行,可以使用fg命令。
暂停或恢复后台任务的执行可通过按下Ctrl-Z键实现。
若要终止单个后台任务,使用kill命令;若需结束所有后台任务,则应使用disown命令。