nohup缺陷及screen命令

nohup的缺陷

在开发Discord Monitor过程中需要将Monitor挂起到后台,最开始使用的是nohup命令:

1
nohup python3 *.py > *.log 2>&1 &

将标准错误(2)重定向到标准输出(&1),标准输出(&1)再被重定向到指定的log文件中。
&指在后台运行,但当用户退出(挂起)的时候,命令也跟着退出。将nohup和&组合在一起:

1
nohup COMMAND &

理论上是可以将命令永久的放在后台执行,但是在实际中不是这样。因为是租用的Azure,必须使用SSH远程登录后进行操作,在使用nohup命令中发现关闭SSH后程序依旧挂断了,即使使用exit退出帐号再用

1
jobs

命令查看刚刚nohup的操作都被结束了。
原因是当网络断开或终端窗口关闭后,控制进程收到SIGHUP信号(挂断信号,默认的动作是终止程序)退出,会导致该会话期(Session, 一个或多个进程组的集合)内其他进程退出。

screen

screen是一个可以在多个进程之间多路复用一个物理终端的窗口管理器。screen中有会话的概念,用户可以在一个screen会话中创建多个screen窗口,在每一个screen窗口中就像操作一个真实的telnet/SSH连接窗口那样。
可以通过直接输入

1
screen

创建一个窗口。如果想要将窗口挂起,可以使用Ctrl+a d命令。
常用的命令还有:

1
2
3
screen -ls // 查看screen会话
screen -list // 同 -ls
screen -r * // 重新连接screen会话