问题
我们用远程终端连接远程主机的时候,有的程序要执行长达几小时甚至几天。例如晚上10点半,我在远程终端上启动一个spark程序,有一些结果重定向到标准输出,这个程序要运行10小时。第二天早上一看,远程终端断开了,一看程序运行结果,只运行了3小时就中断了。
原因
通过远程终端启动的程序,当远程终端断开会话的时候,程序也会终止。
解决办法1:nohup
您可以执行如下命令
nohup [您本来要执行的命令] &
例如,我本来要执行,python test.py,现在改为执行:
nohup python test.py &
这样,我就可以关掉终端,程序会一直运行到结束(远程主机正常的情况下)。程序本来要重定向到标准输出的结果会重定向到当前目录的nohup.txt。
解决办法2:screen
nohup命令有个问题就是,你第二次打开终端的时候,你无法在终端看到程序的执行结果,无法看到重定向到标准输出的结果。解决办法是:用screen命令,这个命令可能需要安装,安装命令:
sudo apt install screen
安装完成之后,执行
screen
进入一个"screen"后,执行
python test.py
关闭终端,程序依然在运行
重新打开终端,执行
screen -r [screen信息] # 可以输入 screen -r 查看有哪些进程,再确定后缀哪些信息
即可看到程序执行的情况,和直接执行[python test.py]看到的结果一样
进程命令ps
需要掌握一些进程命令:
ps -aus | grep python
上面的命令是查找并过滤"python"相关的进程,其他类似
kill 12345
上面的命令是杀死进程号为12345的进程