Linux系统下如何保持进程在SSH客户端断开后仍继续运行?

使用场景

在Linux系统中,在执行一些运行时间比较长的任务时,必须等待执行完毕才能断开SSH连接或关闭客户端软件,否则可能会导致执行中断。本文介绍两种保障程序在您退出登录后持续运行的方法。

方法1:使用nohup命令

1.命令格式

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

nohup python hello.py > nohup.out &

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

2.程序监控

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

tail -f nohup.out

3.查看PID

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

ps -ef | grep python

4.结束进程

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

kill [signal] PID

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

常用的信号类型包括:

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

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

kill -9 PID

5.缺点

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

方法2:使用tmux终端复用工具

tmux是一个终端复用工具,它允许用户创建和管理多个会话(session),每个会话可以包含多个窗口(window),每个窗口又可以分成多个面板(pane)。使用tmux可以在同一个终端窗口中同时运行多个命令或程序,并且可以方便地切换、分离、合并会话等操作。

在第一次使用时需要安装,sudo apt install tmux

1.命令格式

tmux new -s [会话名]	#创建会话
python main.py 		  #执行一个程序或命令
tmux detach           #退出会话
tmux ls               #查看所有会话
tmux a -t [会话名]     #重新进入会话
tmux kill-session -t [会话名] #删除指定会话
tmux kill-server      #删除所有会话

2.在运行程序时如何退出tmux会话

要退出tmux会话,可以按下快捷键Ctrl-b,然后输入:来进入命令模式。在命令模式下,键入kill-session或简写为kill,这将关闭当前tmux会话并停止所有正在运行的程序。

如果我们想保留会话但暂时退出tmux,则可以按下快捷键Ctrl-b,然后按下d,这将使我们返回到终端并将tmux会话留在后台运行。

posted @ 2023-06-06 17:29  Xiao·Tong  阅读(1724)  评论(0编辑  收藏  举报