shell 关闭与服务器的连接后,保持程序可以后台运行的处理方式


〇、简记

偶尔会通过xshell连接服务器,将程序放在服务器中运行,但是时常会因自己误操作或者其他情况,意外断开了xshell与服务器的连接,结果服务器运行的程序也顺势中断了,从而有不得不重头再来。因此,为了中断xshell等工具与服务器的连接,让程序仍能正常运行,借助deepseek工具,找了找处理方案,特此记录,方便后续遇到同样的问题,可以快速应用。

下面开始正题。

一、使用nohup命令

nohup 是一个 Unix/Linux 命令,用于运行一个命令,使其忽略挂起信号(SIGHUP),这样即使关闭终端,程序也能继续运行。

1 使用 nohup 运行 Python 程序

打开终端,使用 nohup 命令运行 Python 脚本,同时将标准输出和标准错误输出重定向到一个文件中。示例如下:

nohup python your_script.py > output.log 2>&1 &
  • nohup:使程序忽略挂起信号。
  • python your_script.py:要运行的 Python 脚本。
  • > output.log:将标准输出重定向到 output.log 文件。
  • 2>&1:将标准错误输出也重定向到标准输出,即同样输出到 output.log 文件。
  • &:将程序放到后台运行。
    备注:上述这种方式原本程序中的打印相关日志信息不会实时记录在output.log文件中,因此会有一点困扰:我知道程序没执行完,但程序到底执行到哪里了,心里没谱

为了解决这个问题,让程序的输出能实时记录到文件中,可以在运行 Python 脚本时设置 -u(无缓冲)选项。示例代码如下:

nohup python -u your_script.py > output.log 2>&1 &
  • -u 选项会让 Python 的标准输入、输出和错误输出都以无缓冲模式运行,这样输出会立即被写入到 output.log 文件中。

2 使用ps查看程序是否正常运行

使用 ps 命令查看程序是否在运行:

ps -ef | grep your_script.py

3 使用kill -9 终止程序

如果需要终止程序,找到程序的进程 ID(PID),然后使用 kill 命令终止它,示例代码如下:

kill -9 <PID>
  • -9 选项表示发送 SIGKILL 信号,这是一个强制终止信号,进程接收到该信号后会立即终止,不会进行任何清理操作。

4 如何查找进程的 PID

4.1 方式一:ps 命令结合 grep

可以使用 ps 命令结合 grep 来查找该脚本进程的 PID。执行以下命令(示例):

ps -ef | grep your_script.py

输出可能如下所示:
your_username 12345 12340 0 10:00 pts/0 00:00:00 python your_script.py
your_username 12347 12346 0 10:01 pts/1 00:00:00 grep --color=auto your_script.py

这里,第一行中 12345 就是 your_script.py 脚本进程的 PID。需要注意的是,第二行是 grep 命令自身的进程,不要将其 PID 误认为是目标进程的 PID

4.2 方式二:使用 pgrep 命令

使用 pgrep 命令更直接地查找进程的 PID,示例代码如下:

pgrep -f your_script.py

该命令会直接输出进程的 PID,例如:
12345

一旦获取到了进程的 PID,就可以使用 kill -9 命令来强制终止该进程。假设 PID 为 12345,执行以下命令:

kill -9 12345

5 验证进程是否已终止

该处理方式和 如何查找进程的 PID 方法一致。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

积跬步,慕至千里

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值