linux脱离终端运行程序

此篇主要针对于本人使用mobaxterm出现的问题,mobaxterm远程操控服务器的时候大多数时候挺方便的,有时候超过6分钟未操作会自动断开,这个小问题只需要在设置里面把SSH保持连接勾选上就好了。

但困扰我的并不是这个问题,当我想让我的项目持久的跑在服务器上的时候,每次一关闭mobaxterm或者我的笔记本断网, 服务器中的程序进程也随之断开了,我就纳闷了,跟我的主机保持状态一致的服务器,我还要你干嘛???

随后查阅资料发现,每次只要断开运行在mobaxterm程序的标签或者是直接关闭mobaxterm都会自动的关掉当前运行的程序。那么只需要把程序脱离终端就好了啊。

操作如下(我原先的运行指令是:./server 80):

  • nohup 你的shell命令 &(如:nohup ./server 80 &)

nohup命令可以让你的shell命令忽略SIGHUP信号,即可以使之脱离终端运行。这样就可以让你的程序免于被自动关闭了,当然,可千万别忘了关闭,所以结尾的&作用就是运行在后台(这里体现不出,主要为了让其显示进程号),附带显示该进程号。不加&也没关系只是到时候找该进程的时候稍微麻烦一些罢了。

下面是运行结果:

[r
### 如何确保 Linux 系统中的程序SSH 连接后仍能持续运行 为了使程序在关闭 SSH 会话之后依旧能够正常运行,有几种不同的方法可供选择。 #### 方法一:使用 `nohup` 命令配合重定向输出文件 当通过 SSH 登录到远程主机并希望启动的应用能在退出终端后继续工作时,可以采用 nohup 工具。此工具允许指定的任务忽略 SIGHUP 信号(默认情况下会在用户注销时发送给所有子进程),从而防止这些任务因用户的登出而终止[^1]。具体操作如下: ```bash nohup command > output.log 2>&1 & ``` 这里 `command` 是要执行的具体指令;`>` 符号用于将标准输出重定向至名为 `output.log` 的日志文件中保存;`2>&1` 表示把错误信息也写入同一文件内;最后面的 `&` 则表示该作业将在后台被执行。 然而,在某些环境中仅依靠 nohup 可能不足以完全解决问题,因为尽管它可以保护进程免受 HUP 信号的影响,但如果络连接意外中,则可能会导致其他类型的信号被传递给目标进程进而造成其异常结束的情况发生。 #### 方法二:利用 screen 或 tmux 创建持久化会话 对于更稳定的解决方案来说,推荐使用像 GNU Screen 或 Tmux 这样的多路复用器创建独立于当前登录会话之外的新 shell 会话。这类软件可以在本地建立一个新的虚拟控制台环境,并将其与实际物理设备解耦合起来,即使客户端突然掉线也不会影响正在其中运行的各种应用程序和服务的状态。 以 **tmux** 为例: ```bash # 开始新的 session 并命名为 mysession tmux new-session -s mysession # 执行所需命令... # 脱离当前 session (按 Ctrl+b 键后再按 d) Ctrl+b d ``` 此时即可安全地开端口而不必担心任何正在进行的工作会被迫停止。稍后可以通过下面这条语句重新接入之前留下的位置: ```bash tmux attach-session -t mysession ``` 这种方法不仅解决了由于意外所引发的一系列麻烦事端,同时也提供了更多实用特性比如水平/垂直分割窗格、复制粘贴模式等功能来提升工作效率[^4]。 #### 方法三:设置系统级别的守护进程管理机制 如果计划长期部署某项服务的话,那么最理想的方式莫过于借助 systemd 单元定义文件的形式注册成为正式的服务单元了。这样做不仅可以实现开机自启的效果,而且还能享受到诸如自动重启失败实例之类的高级功能保障业务连续性不受干扰。 编写一个简单的 .service 文件放置于 `/etc/systemd/system/` 下: ```ini [Unit] Description=My Long Running Service [Service] ExecStart=/path/to/executable Restart=always [Install] WantedBy=multi-user.target ``` 完成配置编辑以后记得刷新 daemon 配置缓存以便加载最新的修改内容: ```bash sudo systemctl daemon-reload ``` 随后就可以按照常规流程启用以及查询对应 service 的状态啦! ```bash sudo systemctl start myservicename.service sudo systemctl status myservicename.service ``` 综上所述,针对不同场景需求可以选择合适的技术手段达成目的——短期临时性的任务适合选用前两种方案之一;而对于那些期望获得更高稳定性和可靠度的关键型应用而言则建议优先考虑第三种方式即集成进操作系统自带的服务管理体系当中去[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值