Linux系统下如何保持进程在SSH客户端断开后仍继续运行?
使用场景
在Linux系统中,在执行一些运行时间比较长的任务时,必须等待执行完毕才能断开SSH连接或关闭客户端软件,否则可能会导致执行中断。本文介绍nohup命令,AutoDL平台无法安装tmux,但是可以使用nohup命令,简单好用,可以指定文件保存日志。
使用nohup执行命令
nohup,可以使运行的命令忽略SIGHUP信号。因此,即使退出登录,程序仍旧会继续执行。通常情况下,在nohup命令尾部加上&字符,才能将命令放至后台执行。具体示例如下所示。
说明
nohup通常用于执行无干预的自动化程序或脚本,无法完成带有交互的操作。
-
原bash 命令
bash hello.sh
-
使用nohup执行bash命令。
在命令头尾分别加上nohup和&,可以看到nohup输出了一行信息,再Enter键就跳回了Shell命令行,此时命令已经在后台执行了,nohup将命令的输出重定向至当前目录的nohup.out文件中。同时,nohup会将对应程序的PID输出,PID可用于需要中断进程时结束进程。
nohup bash hello.sh &
说明
在命令中也可以使用重定向将程序的输出改为自己想要的文件名,如下所示,则程序的输出就会写到hello.log文件中。
nohup bash hello.sh >hello.log &
系统显示类似如下。
-
执行如下命令,可以持续的查看nohup.out的输出,达到监控程序的效果。
tail -f hello.log
- 退出tail命令: ctrl+z或者ctrl+c
-
执行如下命令,结束进程。
kill -TRM [$PID]
说明
[$PID]为之前nohup命令输出的值。
-
上面5的命令我用的不太好用,介绍别的杀死程序方法。
方法1:
如果没有退出客户端界面,可以先通过 “jobs” 命令查看程序是否在运行,此时只有序号没有PID号;
输入命令 “jobs -l” 会显示程序的PID号,然后通过 “kill -9 PID”杀死程序;
输入命令 “jobs” 查看程序是否被杀死。
方法2:
如果退出过客户端界面,输入 “jobs” 命令查不到正在运行的程序;
输入 “ps ux” 来查看所有程序的进程号PID,然后再通过 “kill -9 PID” 杀死程序;
输入 “ps ux” 来查看程序是否被杀死。
原文链接:https://blog.csdn.net/qq_38835492/article/details/80554774