nohup命令和screen命令

问题

我们用远程终端连接远程主机的时候,有的程序要执行长达几小时甚至几天。例如晚上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的进程

猜你喜欢

转载自blog.csdn.net/ten_sory/article/details/89257241