本文仍在更新,非最终版本。。
结合下文一起使用:

1. nohup,jobs,bg,fg,&用法

# 将命令放入后台执行,终端关闭后命令也关闭 
<terminal order> &

# 命令放入后台执行,终端关闭后命令也关闭
nohup <terminal order> & # nohup会生成一个屏幕记录文件
*Ctrl+Z*# 此命令会停止此进程
bg #此命令保持命令在后台执行
jobs #可看到整整执行的命令号
kill %<number>


# 跨服务器用法
# 此时不能再加& 因为需要输入密码,如果加&会处于空白状态,无法输入服务器密码
nohup <terminal order> #执行并生成nohuop.out屏幕记录文档
# 下一步输入密码及/或二次验证码
<Ctrl+Z #暂停后台运行的job> #有时这行也可省略
bg #将暂停的后台job重新start
jobs #查看正在运行的job
tail -f nohup.out #查看后台运行job的屏幕输出

# 推荐rsync结合使用!!!!!!看这里!!!!!!
screen
nohup rsync -avzu --progress <source_path/files> <destination_path>
bg
# 若bg切不出去,先ctrl+z再bg
tail -f nohup.out #查看后台运行job的屏幕输出

2. tmux

还没试过

3. Screen

开启screen后,系统后台常驻一个ssh命令行界面,可随时关闭或取出,对于长时间的命令操作,且ssh会超时关闭的服务器,推荐先开启一个screen再操作命令。

# 开启一个Screen
screen
#接下来可执行命令,结合nohup+&
# 恢复一个Screen
screen -ls
screen -r <number>

# 杀死screen
如果想杀死一个已经detached的screen会话,可以使用以下命令:

screen -X -S [session # you want to kill] quit
举例如下:

[root@localhost ~]# screen -ls
There are screens on:
        9975.pts-0.localhost    (Detached)
        4588.pts-3.localhost    (Detached)
2 Sockets in /var/run/screen/S-root.

[root@localhost ~]# screen -X -S 4588 quit
[root@localhost ~]# screen -ls
There is a screen on:
        9975.pts-0.localhost    (Detached)
1 Socket in /var/run/screen/S-root.

可以看到,4588会话已经没有了。

4.综合实例

以从Lonestar5服务器向ada服务器拷贝多个文件为例,本例中ada服务器的登录需要密码和二步验证码。
首先ssh登录ls5服务器,如我需要拷贝RCESM模式下的所有文件到ada以进行restart run。

# 到达拷贝目录
cd /scratch/06660/hengkai/WORK/Models/CRESM_new/run
screen # 此时屏幕自动清空并开启了后台的screen窗口
# 执行拷贝并生成nohup.out窗口记录文件
nohup rsync -avzu --progress ./kuro03_20031015_20040330_run06_restart01/{*.nml,*.sh,*_in,*.in,*.input,docn.streams.txt.prescribed,KE03.atm.r.2004-01-13_00_00_00.nc,KE03.cpl.r.2004-01-13-00000.nc,KE03.docn.rs1.2004-01-13-00000.bin,KE03.ocn.r.2004-01-13_00:00:00.nc,*wrfmask*,*.job,rpointer*,varinfo.dat,seq_maps.rc,wrf*} hengkai.yao@ada-ftn1.tamu.edu:/scratch/user/hengkai.yao/WORK/Models/RCESM-1.0.0_zs/run/kuro03_20031015_20040330_run06_restart01

# 此时窗口提示输入密码,则我们输入密码并回车,密码并不显示

# 此时窗口提示选择二步验证方式,我们输入1并回车,在手机上点击通过验证

# 此时窗口空白,我们直接输入
bg
# 1)若此时未退回可输入命令行,则点击;
ctrl+z
bg
# 2)若已退回可输入命令行,则不需要点击ctrl+z,也不需要bg

#查看后台运行job的屏幕输出
tail -f nohup.out # 若拷贝速度持续变化,则正在拷贝,直到完成

以下为转载

转载:后台运行常用命令

1、后台执行脚本命令功能介绍

&:将当前命令以后台的形式运行;
ctrl+z:将前台任务转后台并冻结;
bg:将后台冻结的任务再次运行起来;
fg:将后台任务重新转前台执行;
nohup:隔离终端挂断信号,是命令的前缀;
disown:隔离终端挂断信号,事后使用;
setsid:重新创建一个会话进程来执行任务;
(cmd):创建一个独立shell来执行命令;
jobs:查看在后台运行的任务列表;
ps:查看正在运行的进程信息;
kill:杀掉某个进程;

 下面就分别对上面的命令举例来说说如何让脚本命令在后台执行,先看一下测试用例。

2、后台脚本任务测试用例

 下面所有的例子中的脚本统一使用这个脚本,它的功能是每2秒打印一次当前时间。hzqtest8.sh是测试脚本的名字,.sh文件最好放在当前用户默认目录中(如果你放在其他目录了,请注意权限问题!)。

1)创建脚本:

#创建脚本文件
hzq@ubuntu:~$ sudo gedit hzqtest8.sh
[sudo] hzq 的密码:
#输入脚本内容
#!/bin/bash
for ((i = 0; i < 10; i++)); do
    sleep 2
    echo $(date)
done
#保存退出。

2)赋予执行权限:

hzq@ubuntu:~$ sudo chmod 755 hzqtest8.sh

3、linux后台运行命令和脚本任务的例子

 下面通过6个典型的使用案例来解释各个命令的功能和使用方法。

● 例子1:用&

hzq@ubuntu:~$ ./hzqtest8.sh &

 功能:&加在一个命令的最后,可以把当前行的命令放在后台执行。注意&前面有空格。

 这种方法中,当非正常退出当前shell终端时(包括直接叉掉、杀死、直接注销关机等),后台运行的hzqtest8.sh也会结束。这是因为脚本在后台运行时,运行脚本的父进程是当前shell终端进程,关闭当前shell终端时,会发送hangup挂断信号给子进程,子进程收到hangup信号后也就退出了。

 但是,如果用exit退出,ctrl+d退出,命令可以继续在后台运行。

● 例子2:用nohup和&

为了解决上面的问题可以用下面的例子,

hzq@ubuntu:~$ nohup ./hzqtest8.sh &
[1] 3640
hzq@ubuntu:~$ nohup: 忽略输入并把输出追加到'nohup.out'
hzq@ubuntu:~$

 功能:命令前加上nohup可以让你退出shell之后继续运行相应的进程。nohup就是忽略当前任务挂断信号的意思。这样就解决上面的问题了。

 输入nohup命令之后会给出提示:nohup: ignoring input and appending output to ‘nohup.out’(中文版参见上文),这是正常提示,直接打回车就可以。

nohup默认会把标准输出重定向到默认文件nohup.out中,你可以自定义该输出文件,如下例子。

hzq@ubuntu:~$ nohup ./hzqtest8.sh >hzqout.txt &
[1] 3668
hzq@ubuntu:~$ nohup: 忽略输入重定向错误到标准输出端

[1]+  已完成               nohup ./hzqtest8.sh > hzqout.txt
hzq@ubuntu:~$
#看一下输出文件里的内容。
hzq@ubuntu:~$ cat hzqout.txt
2019年 10月 25日 星期五 23:37:48 CST
2019年 10月 25日 星期五 23:37:49 CST
2019年 10月 25日 星期五 23:37:50 CST
2019年 10月 25日 星期五 23:37:51 CST
2019年 10月 25日 星期五 23:37:52 CST
2019年 10月 25日 星期五 23:37:53 CST
2019年 10月 25日 星期五 23:37:54 CST
2019年 10月 25日 星期五 23:37:55 CST
2019年 10月 25日 星期五 23:37:56 CST
2019年 10月 25日 星期五 23:37:57 CST

如果输入nohup后不想打回车,可以用下面的例子,

hzq@ubuntu:~$ nohup ./hzqtest8.sh >hzqout.txt 2>&1 &
[1] 3690
hzq@ubuntu:~$ cat hzqout.txt
nohup: 忽略输入
2019年 10月 25日 星期五 23:38:53 CST
2019年 10月 25日 星期五 23:38:54 CST
2019年 10月 25日 星期五 23:38:55 CST
2019年 10月 25日 星期五 23:38:56 CST
2019年 10月 25日 星期五 23:38:57 CST
2019年 10月 25日 星期五 23:38:58 CST
2019年 10月 25日 星期五 23:38:59 CST
2019年 10月 25日 星期五 23:39:00 CST
2019年 10月 25日 星期五 23:39:01 CST
2019年 10月 25日 星期五 23:39:02 CST
[1]+  已完成               nohup ./hzqtest8.sh > hzqout.txt 2>&1
hzq@ubuntu:~$

 功能解释:2>&1 是将错误提示信息的输出 重定向到 标准输出,而这里的标准输出已经重定向到hzqout.txt文件,也就是说标准的错误提示也直接输出到out.file文件中,所以就没有提示了,也就不用再打回车了。

另外,如果你的后台任务没有输出,你可以直接重定向到/dev/null

● 例子3:用ctrl+z、jobs和bg

hzq@ubuntu:~$ ./hzqtest8.sh
2019年 10月 25日 星期五 23:56:15 CST
2019年 10月 25日 星期五 23:56:16 CST
2019年 10月 25日 星期五 23:56:17 CST
2019年 10月 25日 星期五 23:56:18 CST
^Z[3]   已完成               nohup ./hzqtest8.sh > /dev/null 2>&1

[4]+  已停止               ./hzqtest8.sh
hzq@ubuntu:~$ jobs
[4]+  已停止               ./hzqtest8.sh
hzq@ubuntu:~$ bg 4
[4]+ ./hzqtest8.sh &
hzq@ubuntu:~$ 2019年 10月 25日 星期五 23:57:04 CST
2019年 10月 25日 星期五 23:57:05 CST
2019年 10月 25日 星期五 23:57:06 CST
2019年 10月 25日 星期五 23:57:07 CST
2019年 10月 25日 星期五 23:57:08 CST
2019年 10月 25日 星期五 23:57:09 CST

[4]+  已完成               ./hzqtest8.sh
hzq@ubuntu:~$ 

 功能:上面的例子中脚本命令事先已经正常执行,然后你可能发现这个任务执行时间比较长,一直独占着终端窗口的使用,很不方便。

 ctrl+z命令可以将当前的前台任务转后台,也就是放到后台任务池中了,这个时候前台窗口就变成非阻塞状态了,但是要注意转过去的任务在后台默认是冻结状态。从上面例子中可以看出任务输出了4行之后中断了。

 这个时候需要用到bg命令,bg命令的功能就是将后台冻结的任务再次运行起来,但是它需要一个任务ID号,而jobs命令就是查看所有任务状态的,包括ID号。

 例子中的bg 4就是当前任务号码。

 该例子中没有使用nohup,有需要的同学可以自行加上,包括重定向都是可以加上的。

● 例子4:用disown、jobs和&

 上面的例子中没有使用nohup命令,所以当终端环境强行退出时,后台正在执行的任务(作业/命令/程序/脚本)也会退出,由于各种原因你可能想事后加上nohup的功能(忽略终端关闭信号),看下面的例子。

hzq@ubuntu:~$ ./hzqtest8.sh >hzqout.txt 2>&1 &
[1] 7168
hzq@ubuntu:~$ jobs
[1]+  运行中               ./hzqtest8.sh > hzqout.txt 2>&1 &
hzq@ubuntu:~$ disown -h %1
hzq@ubuntu:~$ 

 功能:disown也是隔离终端挂断信号,但主要用于事后使用。上面执行完disown之后,你可以强行关闭终端窗口,然后等待1分钟后去查看重定向文件hzqout.txt看看有没有执行成功,如果成功里面有完整的10条信息,并且是连续的。下面的结果可以看到已经成功执行了。

hzq@ubuntu:~$ ps -ef |grep hzqtest
hzq        7166   7152  0 01:11 pts/1    00:00:00 grep --color=auto hzqtest
#确认后台进程已经执行完毕退出,后面会解释用法。
hzq@ubuntu:~$ cat hzqout.txt
2019年 10月 26日 星期六 01:11:16 CST
2019年 10月 26日 星期六 01:11:20 CST
2019年 10月 26日 星期六 01:11:24 CST
2019年 10月 26日 星期六 01:11:28 CST
2019年 10月 26日 星期六 01:11:32 CST
2019年 10月 26日 星期六 01:11:36 CST
2019年 10月 26日 星期六 01:11:40 CST
2019年 10月 26日 星期六 01:11:44 CST
2019年 10月 26日 星期六 01:11:48 CST
2019年 10月 26日 星期六 01:11:52 CST
hzq@ubuntu:~$ 

● 例子5:用setsid和&

hzq@ubuntu:~$ setsid ./hzqtest8.sh &
[1] 3001
hzq@ubuntu:~$ 2019年 10月 26日 星期六 16:27:09 CST
2019年 10月 26日 星期六 16:27:11 CST
2019年 10月 26日 星期六 16:27:13 CST
2019年 10月 26日 星期六 16:27:15 CST
2019年 10月 26日 星期六 16:27:17 CST
2019年 10月 26日 星期六 16:27:19 CST
2019年 10月 26日 星期六 16:27:21 CST
2019年 10月 26日 星期六 16:27:23 CST
2019年 10月 26日 星期六 16:27:25 CST
2019年 10月 26日 星期六 16:27:27 CST

[1]+  已完成               setsid ./hzqtest8.sh
hzq@ubuntu:~$

 功能:setsid是重新创建一个会话进程来执行任务。setsid可以起到和nohup类似的效果,但是setsid更彻底,所以严格上说setsid不是忽略终端关闭信号,而是这个后台任务创建之后就与当前终端没有关系了,所以当前终端的关闭自然不会影响到它。

 同然的原理,大家估计已经想到了,jobs命令在这个时候是不起作用的。

 另外,和nohup还有一个区别就是,不用多打一个回车,因为它没有提示信息。

● 例子6:用 小括号/圆括号 和&

hzq@ubuntu:~$ (./hzqtest8.sh &)
hzq@ubuntu:~$ 2019年 10月 26日 星期六 23:58:26 CST
2019年 10月 26日 星期六 23:58:28 CST
2019年 10月 26日 星期六 23:58:30 CST
2019年 10月 26日 星期六 23:58:32 CST
2019年 10月 26日 星期六 23:58:34 CST
2019年 10月 26日 星期六 23:58:37 CST
2019年 10月 26日 星期六 23:58:39 CST
2019年 10月 26日 星期六 23:58:41 CST
2019年 10月 26日 星期六 23:58:43 CST
2019年 10月 26日 星期六 23:58:45 CST
hzq@ubuntu:~$ 

 功能:小括号可以起到和setsid类似的效果,小括号是创建一个独立shell来执行命令,当前的后台任务创建之后就与当前终端没有关系了,所以终端的关闭也不会影响到它。

 同然的原理,jobs命令在这个时候是不起作用的。

 另外,和setsid一样,圆括号执行命令不用多打一个回车,因为它没有提示信息。

4、查看后台任务的命令

 常用的有jobs和ps命令,区别是jobs用于查看当前终端后台运行的任务,换了终端就看不到了(包括关闭终端再重新打开也看不到的)。而ps命令用于查看全局所有后台进程的信息,当然可以看到别的终端运行的后台任务。

1)jobs命令

功能:查看当前终端任务信息

hzq@ubuntu:~$ jobs -l
[1]-  3427 运行中               nohup ./hzqtest8.sh &
[2]+  3445 运行中               nohup firefox &

jobs -l选项可以多显示一个PID信息。
第一列:任务序号,注意并不是PID。
第二列:+ 号表示当前顶部任务,- 号其次任务,没符号是其他任务。
第三列:PID(上面例子中,默认情况下没有PID)。
第四列:状态,四种(运行中,已停止,已完成,已杀死)。
第五列:任务名称(即刚才运行的命令)。

2)ps命令

功能:全局查看进程信息

hzq@ubuntu:~$ ps -ef |grep gedit
root       3791   2566  0 00:29 pts/0    00:00:00 sudo gedit
root       3792   3791  0 00:29 pts/0    00:00:00 gedit
root       3802   2566  0 00:30 pts/0    00:00:00 sudo gedit
root       3803   3802  0 00:30 pts/0    00:00:00 gedit
hzq        3820   2566  0 00:44 pts/0    00:00:00 grep --color=auto gedit

 ps命令是Process Status的缩写,功能比较强大,参数非常多,尤其与其他命令组合时可以完成很复杂的操作。
 ps -ef |grep hzqtest是常见用法之一,
 e:表示列出所有进程,f:表示输出完整格式,
 grep hzqtest:表示过滤筛选“hzqtest”关键字。
 上面例子中,第一列:用户名,第二列:PID,第三列:父级PID,最后一列:命令名称或路径

5、关闭后台任务的命令

 处于linux后台的任务有几种关闭方式:任务运行完毕自行退出;通过交互方式退出(包括传入参数对话,界面操作,终端ctrl+c等);通过进程管理工具杀掉;关闭系统退出等。

 kill命令:属于进程管理工具,功能:杀掉进程。

hzq@ubuntu:~$ jobs
[2]   已停止               nohup firefox
[3]-  已停止               nohup sudo gedit
[4]+  已停止               nohup sudo gedit
hzq@ubuntu:~$ kill -9 %2

[2]   已停止               nohup firefox
hzq@ubuntu:~$ jobs
[2]   已杀死               nohup firefox
[3]-  已停止               nohup sudo gedit
[4]+  已停止               nohup sudo gedit
hzq@ubuntu:~$ jobs
[3]-  已停止               nohup sudo gedit
[4]+  已停止               nohup sudo gedit

1)上面的例子中先通过jobs命令查看任务号,然后通过任务号%N杀死进程!最后再次查询发现jobs中的任务已经减少了。

hzq@ubuntu:~$ ps -ef |grep gedit
root       3791   2566  0 00:29 pts/0    00:00:00 sudo gedit
root       3792   3791  0 00:29 pts/0    00:00:00 gedit
root       3802   2566  0 00:30 pts/0    00:00:00 sudo gedit
root       3803   3802  0 00:30 pts/0    00:00:00 gedit
hzq        3829   2566  0 00:59 pts/0    00:00:00 grep --color=auto gedit
hzq@ubuntu:~$ sudo kill -9 3791
[sudo] hzq 的密码: 
[3]-  已杀死               nohup sudo gedit
hzq@ubuntu:~$ ps -ef |grep gedit
root       3792    912  0 00:29 pts/0    00:00:00 gedit
root       3802   2566  0 00:30 pts/0    00:00:00 sudo gedit
root       3803   3802  0 00:30 pts/0    00:00:00 gedit
hzq        3835   2566  0 01:01 pts/0    00:00:00 grep --color=auto gedit

2)上面的例子中先通过ps命令查看任务PID,然后通过PID杀掉进程,注意上面例子中使用了管理员权限。
3)如果你的任务还没有转到后台运行,那么直接Ctrl+c 就可以终止了。或者你也可以将后台任务转到前台然后执行ctrl+c来终止。该方法可参考下面举例。

6、前后台任务的转换

1)fg命令

功能:将后台中的任务调至前台并继续运行。

hzq@ubuntu:~$ jobs
[1]-  运行中               nohup gedit &
[2]+  运行中               nohup ./hzqtest8.sh &
hzq@ubuntu:~$ fg 1
nohup gedit

先通过上面介绍的jobs命令查看任务信息,然后用fg N将选中的任务调到前台,跳到前台之后终端界面被阻塞,此时终端不能做别的事情了。

2)Ctrl + z 命令

功能:将正在前台执行的命令作业放到后台,并冻结运行状态。

hzq@ubuntu:~$ ./hzqtest8.sh
2019年 10月 27日 星期日 01:53:31 CST
2019年 10月 27日 星期日 01:53:33 CST
^Z
[3]+  已停止               ./hzqtest8.sh
hzq@ubuntu:~$ jobs
[3]+  已停止               ./hzqtest8.sh

例子中先正常运行任务脚本,可以看到刚开始是正常输出的,执行ctrl+z之后,提示任务已停止,用jobs查看任务已在后台并处于停止状态。

3)bg命令
功能:将后台冻结的任务再次运行起来,运行后任务还在后台。

hzq@ubuntu:~$ jobs
[1]+  已停止               ./hzqtest8.sh
hzq@ubuntu:~$ bg 1
[1]+ ./hzqtest8.sh &
hzq@ubuntu:~$ 2019年 10月 27日 星期日 01:58:17 CST
2019年 10月 27日 星期日 01:58:19 CST
2019年 10月 27日 星期日 01:58:21 CST

[1]+  已完成               ./hzqtest8.sh

上面例子中先用jobs查看有一个任务处于后台停止状态,执行bg 1之后任务继续在后台运行,并继续输出剩余信息。
————————————————
版权声明:本文为CSDN博主「黄志千」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/davidhzq/article/details/102766881

转载:SCREEN

我们常需要SSH 或者telent 远程登录到Linux 服务器,经常运行一些需要很长时间才能完成的任务,在此期间不能关掉窗口或者断开连接,否则这个任务就会被杀掉,一切半途而废了。这时,我们可以用screen命令解决这个问题。

screen命令可以实现当前窗口与任务分离,我们即使离线了,服务器仍在后台运行任务。当我们重新登录服务器,可以读取窗口线程,重新连接任务窗口。

主要功能:

会话恢复

只要Screen本身没有终止,在其内部运行的会话都可以恢复。这一点对于远程登录的用户特别有用——即使网络连接中断,用户也不会失去对已经打开的命令行会话的控制。只要再次登录到主机上执行screen -r就可以恢复会话的运行。同样在暂时离开的时候,也可以执行分离命令detach,在保证里面的程序正常运行的情况下让Screen挂起(切换到后台)。这一点和图形界面下的VNC很相似。

多窗口

在Screen环境下,所有的会话都独立的运行,并拥有各自的编号、输入、输出和窗口缓存。用户可以通过快捷键在不同的窗口下切换,并可以自由的重定向各个窗口的输入和输出。Screen实现了基本的文本操作,如复制粘贴等;还提供了类似滚动条的功能,可以查看窗口状况的历史记录。窗口还可以被分区和命名,还可以监视后台窗口的活动。

会话共享

Screen可以让一个或多个用户从不同终端多次登录一个会话,并共享会话的所有特性(比如可以看到完全相同的输出)。它同时提供了窗口访问权限的机制,可以对窗口进行密码保护。

GNU’s Screen 官方站点:http://www.gnu.org/software/screen/

screen 的使用

安装

一般的linux系统都会自带screen,如果没有安装的话,使用

$ sudo apt-get install screen

或$ sudo yum install screen

新建窗口

新建一个窗口有3种方法:

$ screen #这样就可以新建窗口,进入到一个窗口中,但是这样窗口就没有名字,无法区分他们

$ screen -S name #这样新建一个名字为name的窗口,并入到该窗口中 
例如:screen -S count 新建了一个叫count的窗口并进入

$ screen command #这样新建一个窗口并在窗口中执行command,同样没有名字 
例如:`screen python ./a.py` 新建并执行a.py程序

会话分离

我们在一个窗口运行某个程序之后,想退出登录关闭terminal干点别的事,让程序在后台运行。这时就需要和窗口会话分离,有2种方式:

1)快捷键Ctrl a表示进入命令模式
在当前会话窗口中按Ctrl a +d快捷键可以实现分离,这时窗口会弹出[detached]的提示,并回到主窗口。

2)screen -d name #远程detach某个session,前提是已经跳出了name窗口

这样妈妈再也不用担心我们关掉terminal程序就不运行了。

恢复会话窗口

首先查看有哪些窗口正在运行

$ screen -ls #列出窗口列表

There is a screen on:

2637.count (12/17/2015/10:00:32 AM) (Detached)

$ screen -r 2637 #进入2637线程,恢复count会话窗口

这样就能回到count窗口了

杀死会话窗口

如果想关掉一个多余的窗口,有3种方法:

kill -9 threadnum 例如在上面的2637,kill -9 2637 即可杀死线程,当然就杀死了窗口

使用Ctrl a +k 杀死当前窗口和窗口中运行的程序

使用Ctrl a 然后输入quit命令退出Screen会话。需要注意的是,这样退出会杀死所有窗口并退出其中运行的所有程序

清除死去的窗口

当窗口被杀死后,再用screen -ls 可以看到该窗口后面的(???dead)字样,说明窗口死了,但是仍在占用空间。这时需要清除窗口

$ screen -wipe #自动清除死去的窗口

这样的窗明几净了~
————————————————
版权声明:本文为CSDN博主「Nicoder」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/hejunqing14/article/details/50338161
参考:
https://www.tecmint.com/keep-remote-ssh-sessions-running-after-disconnection/

https://zhengdl126.iteye.com/blog/1523784

https://www.ibm.com/developerworks/cn/linux/l-cn-nohup/index.html

https://www.jianshu.com/p/82fe7f184b93

https://nanxiao.me/kill-detached-screen-session/

Last modification:March 26th, 2021 at 12:05 pm
If you think my article is useful to you, please feel free to appreciate