引言
- 场景就是平时在使用第三方软件去连接远端服务器的时候经常遇到断开连接的情况(比如我使用过的secureCRT,xshell,iterm等等工具),但是在要训练一个模型或者其他不能终端的任务的时候,断开连接真的很让人崩溃且耽误事儿,所以有没有一个Linux上的方法可以让命令后台执行不中断呢?
nohup( no hang up)
用于Linux系统后台不挂断地运行命令,退出终端不会影响程序的运行。
- 使用方法
- nohup Command [Arg1,Arg2...] [&]
- Command就是要执行的命令,然后跟着执行命令需要用到的参数
- & 让命令在后台执行,终端退出后命令仍然执行(其是可以单独使用的)
- 其实这个nohup和&其实是两个作用,nohup负责命令永久执行,即使断开ssh连接都不影响(就是说会占着一个终端页面),&的作用是让程序后台运行(不占一个页面),结合到一起就是后台永久执行,如果要关闭,务必要kill
- nohup Command [Arg1,Arg2...] [&]
- 补充说明:(下图是执行后的返回,貌似也不是很对,因为我使用命令后还是挂了,可能是docker执行出错了)
- 无论是否将nohup的输出重定向输出到终端,输出都将添加到当前目录的 nohup.out 文件中。
- 如果当前目录的nohup.out文件不可写,输出重定向到
$HOME/nohup.out文件中。 - 如果该文件不能创建或者追加,那该Command不可调用,
- 输出文件中出现错误返回的出口值:
- 126 可以查找但不能调用 Command 参数指定的命令
- 127 nohup 命令发生错误或不能查找由 Command 参数指定的命令
- 其他的就是Command参数指定命令的退出状态了
- 关于输出重定向
nohup Command > Command.log 2>&1 &- 0 表示标准输入,1表示标准输出,3表示标准错误输出
- 上述2>&1就是说将标准错误 重定向到标准输出中,然后再输出到Command.log文件中去(>在Linux中是重定向)
- 关于查看进程并kill
ps -aux | grep Command获取进程IDkill -9 进程ID