断开SSH连接后继续执行任务

断开SSH连接后继续执行任务

我们经常需要通过 SSH 连接到远程 Linux 服务器来执行各种任务。但有时,我们希望即使在断开 SSH 连接后,这些任务也能继续运行。

事前使用 nohup命令

nohup,可以使运行的命令忽略 SIGHUP 信号。因此,即使退出登录,程序仍旧会继续执行。通常情况下,在 nohup 命令尾部加上 & 字符,才能将命令放至后台执行。具体示例如下所示:

nohup python hello.py > nohup.out &

在命令头尾分别加上 nohup& 后回车,可以看到 nohup 输出了一行信息,再 Enter 键就跳回了 Shell 命令行,此时命令已经在后台执行了,nohup 将命令的输出重定向至当前目录的 nohup.out 文件中。同时,nohup 会将对应程序的 PID 输出,PID 可用于需要中断进程时结束进程。

程序监控

执行如下命令,可以持续的查看 nohup.out 的输出,达到监控程序的效果。

tail -f nohup.out

查看 PID

使用 ps 命令查找该进程的进程 ID(PID)。例如,执行以下命令可以查看所有运行中的 Python 进程:

ps -ef | grep python

结束进程

结束进程使用 kill 命令,其语法格式如下:

kill [signal] PID

其中,signal 表示要发送的信号类型,PID 表示要结束的进程 ID。

常用的信号类型包括:

  • 15(SIGTERM):默认信号,表示终止进程。
  • 9(SIGKILL):强制终止进程,不能被进程忽略或捕获。

我们通常使用以下命令即可:

kill -9 PID

缺点

使用 nohup 命令的一个缺点就是不方便进行程序监控,只能通过写入到文件中的方式来”曲线救国“,但是这种方式可能导致写入的文件非常大,占据大量磁盘资源。

事后使用 disown 命令

将正在运行中的任务放入后台

首先,如果任务已经在前台运行,可以通过按下 Ctrl+Z 来暂停它。然后,输入 bg 命令将暂停的任务放入后台继续运行。

Ctrl + Z
bg

将任务从当前会话中移除

为了确保任务在 SSH 会话关闭后仍然运行,可以使用 disown 命令。首先,通过 jobs 命令查看后台任务的编号,然后使用 disown 命令将其从当前会话中移除。

jobs
disown -h %jobid # 例如 disown -h %1

其中 jobid 是通过 jobs 命令查看到的后台任务编号。这样,即使 SSH 会话关闭,任务也会继续在后台运行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值