PuTTY 关闭后命令就终止执行?是的!

AdminPi, 运维, 2021-03-29 10:25:32

用惯了Windows的远程桌面后,总觉得Linux也一样,命令是在服务器上执行的,关掉远程连接后命令会依旧执行。包括在一些技术问答网站上面,很多答主都给出了会继续执行的答案;做为一个技术人员,最重要的素养之一就是严谨,我们必须摒弃这种不加验证就给出一个想当然的答案的行为!

那么PuTTY 关闭后,正在执行中的命令是否会继续执行呢?答案是:不会继续执行!

为什么关掉窗口或者是断开连接会使得正在运行的命令终止呢?元凶就是SIGHUP信号!

根据POSIX(可移植操作系统接口)1.1的定义:挂断信号(SIGHUP)默认的动作是终止程序。因此关掉窗口或者是断开连接后,控制进程收到SIGHUP信号,会话期内其他进程随即退出。

纯技术角度去分析会比较晦涩,换一种说法就更容易理解:我们都知道UNIX是一款多用户多任务的网络操作系统(当然也可做单机操作系统使用);Linux等类-UNIX操作系统又是从Unix衍生而来,那么假设让你设计一款多用户的网络操作系统,当用户退出时,正在执行的命令你将如何处理,当然是终止它!

那么一些需要长时间执行的命令就束手无策了吗?总不能一直等到执行完毕才关PuTTY 吧?

当然有方法可以去避免:1.使用nohup命令;2.使用screen。

1.nohup命令,用法比较简单:

nohup <command> [argument…] &

原命令的输出结果默认保存到nohup.out文件。

2.使用screen:

通常情况下,流行的Linux发行版都会自带screen;

查看是否安装了screen:screen -v;

i.创建一个名字叫abc的新会话:screen -S abc;
ii.输入你需要执行的命令;
iii.按下Ctrl-A d(即Ctrl键+a键,之后再按下d键)暂时退出会话;
iv.输入screen -r -S abc,重新回到会话;
screen -ls 命令可以列出现有的screen会话,使用会话id也可以直接重新进入会话。

此文章于  2021-03-29 11:04:24  进行了更新!

© 2024