【shell】后台执行命令 nohup和&、&&

(nohup cmd 2>&1 &) && sleep 1 采用这种方式可以成功

&

最简单的后台运行是:&.
放在一个命令末尾,可以将这个命令放到后台执行。放到后台后主进程将继续向下执行,后台命令将与主进程并行执行。

&&

放在一个命令末尾,与什么都没有单纯换行实际效果相同,等待这个命令执行完后才继续执行下面的命令。

nohup:

nohup 是 no hungup的缩写,意为“不挂断”,我们在使用Xshell等工具执行Linux脚本时,有时候会由于网络问题,导致失去连接,终端断开,程序运行一半就意外结束了。这种时候,就可以用nohup指令来运行指令,使程序可以忽略挂起信号继续运行。

nohup和&的区别

  • &:是指在后台运行,当用户退出(挂起)的时候,命令自动跟着结束
  • nohup:不挂断的运行,注意并没有后台运行的功能,就是指用nohup运行命令可以使命令永久的执行下去,和用户终端没有关系,例如我们断开SSH连接都不会影响他的运行
  • 注意:nohup没有后台运行的意思;&才是后台运行。因此将nohup和&结合使用,就可以实现使命令永久地在后台执行的功能。

查看后台运行的进程

ps -aux | grep "****.sh"ps -def | grep "runoob.sh"

停止后台进程

上面看到对应的 PID 后,可以通过 kill -PID (如 kill -9) 来杀死进程。

2>&1 输出重定向:

nohup /root/runoob.sh > runoob.log 2>&1 &
(nohup cmd 2>&1 &) && sleep 1 采用这种方式可以成功
将标准错误 2 重定向到标准输出 &1 ,标准输出 &1 再被重定向输入到 runoob.log 文件中。
0 – stdin (standard input,标准输入)
1 – stdout (standard output,标准输出)
2 – stderr (standard error,标准错误输出)

参考

参考:https://www.runoob.com/linux/linux-comm-nohup.html

posted @   山上有只羊  阅读(1500)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· .NET Core 中如何实现缓存的预热?
· 三行代码完成国际化适配,妙~啊~
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
点击右上角即可分享
微信分享提示