前言
nohup为什么要跟着&一起使用,不知道大家有没有思考过其中的小区别,另外很多人会推崇使用screen,但是实际生产环境应用场景有限我就不展开了。这次实际遇到的问题主要是因为使用crontab调用了多个不同的nohup后台执行任务,然而代码逻辑中出现对相同文件的占用导致任务进程产生冲突使得system load负载达到600之高,需要kill任务时也不能盲目操作,需要杀掉的进程多且进程名与其它正常的进程名字有交集,需要合理运用pstree找到问题的源头。Linux后台运行任务nohup结合&用法以及如何精准查找进程并kill后台任务实践
更新历史
2019年11月15日 - 初稿
扩展阅读
nohup介绍
用途:不挂断地运行命令。
语法:nohup Command [Arg …] [ & ] - 无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。 - 如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。 - 如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。
退出状态:该命令返回下列出口值: - 126 可以查找但不能调用 Command 参数指定的命令。 - 127 nohup 命令发生错误或不能查找由 Command 参数指定的命令。否则 nohup 命令的退出状态是 Command 参数指定命令的退出状态。
nohup和&的关系
使用 nohup 运行程序:输出重定向,默认重定向到当前目录下 nohup.out 文件
使用 Ctrl + C 发送 SIGINT 信号,程序关闭
关闭 Shell Session 发送 SIGHUP 信号,程序免疫
使用 & 运行程序:程序转入后台运行
结果会输出到终端
使用 Ctrl + C 发送 SIGINT 信号,程序免疫
关闭 Shell session 发送 SIGHUP 信号,程序关闭
nohup和&使用实例一般两个一起组合使用不会受 Ctrl C 和 Shell 关闭的影响:
# 最简单的后台运行
nohup command &
# 输出默认重定向到当前目录下 nohup.out 文件
nohup python main.py &
# 自定义输出文件(标准输出和错误输出合并到 main.log)
nohup python main.py >> main.log 2>&1 &
# 与上一个例子相同作用的简写方法