当某些后台进程仍在运行时,命令“exit”不起作用

2023-12-24

“退出”命令不适用于我的情况,我不明白为什么:

ssh user@mysever <<'HEREDOC'
  echo "1. Running PM2 log..."
  pm2 log &
  echo "2. PM2 log is now in background"
  exit
  echo "3. Won't be here"
HEREDOC

echo "4. Out."

即使使用上面的“exit”命令,我也无法终止 ssh 管道。

我可以看到第一个回声,第二个回声;当然没有第三个回声;并卡住了。我期望看到第四个回声的行为。我必须按 Ctrl+C,然后我会看到第四个回声。


简短回答:您应该重定向标准输入、输出和错误pm2过程:

pm2 log < /dev/null > /dev/null 2>&1 &

这将防止远程 ssh 服务器在 pm2 退出之前保持会话打开。

更长的答案:

ssh user@mysever <<'HEREDOC'
    ...
    pm2 log &

当你跑步时ssh通过这种方式,远程 ssh 服务器将启动远程用户 shell 的副本来处理会话。为了中继远程会话的输入和输出,远程 ssh 服务器将分配一个 TTY 或一组管道。然后它将 TTY 或管道设置为 shell 进程的标准输入、输出和错误。

因此,在远程系统上,您有一个 TTY 或一组管道将远程 shell 进程连接到 SSH 服务器进程。 shell 调用的任何命令都将继承 TTY 或管道集作为命令的标准输入等(除非您使用 shell 功能来重定向标准文件句柄)。

您可能认为 ssh 服务器会在远程 shell 进程退出时终止会话。但事实并非如此。当 ssh 服务器在 TTY 或连接到会话标准输出的管道上读取文件结束条件时,它会终止会话。

在你的情况下,你正在调用这个pm2远程系统上的命令,并且它继承了远程会话的标准输出。只要该程序正在运行,远程 ssh 服务器就不会在标准输出管道上收到 EOF,也不会终止会话。

解决方法是重定向输入pm2进程,因此它不会继承连接到 ssh 服务器的标准句柄:

pm2 log < /dev/null > /dev/null 2>&1 &

如果您想捕获输出,可以重定向到文件而不是 /dev/null。我认为只有标准输出重定向是绝对必要的,但为了确定起见,您也应该重定向标准输入和错误。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当某些后台进程仍在运行时,命令“exit”不起作用 的相关文章

  • JavaMail 的 DCH 类错误

    我正在尝试使用 Glassfish 3 1 提供的 jar 文件在 Java EE 6 中使用 JavaMail 设置一个简单的日志记录测试 关于这个主题似乎有很多问题 但我还没有找到任何有帮助的答案 我的测试代码如下所示 import j
  • Kubernetes Pod 中的日志未显示

    我在 pod 中设置了 Kubernetes 并运行 grpc 服务 我成功命中服务上的端点 其中有 print 语句 但我在日志文件中没有看到任何日志 我之前在 Kubernetes 中运行 cron 作业时见过这种情况 并且日志仅在作业
  • 无法在 Windows 7 中为 heroku 生成 ssh 公钥

    当我努力的时候heroku login通过我机器上的cmd 它说 找不到现有的公钥您想生成一个吗 YN 之后 当我按 y 并输入时 它会说 生成新的 ssh 公钥无法生成密钥 ssh keygen 未被识别为内部或外部命令可操作程序或批处理
  • 关于使用Python启动SSH隧道的问题

    我在从用 Python 编写的 HTTP RPC 服务器启动 SSH 隧道时遇到了麻烦 基于Python的BaseHTTPServer 有一个用Python编写的简单的HTTP RPC服务器 作为其中一项服务的一部分 我想启动从 RPC 服
  • console.log 是如何工作的?

    第一个例子 在以下示例中 http jsfiddle net maniator ScTAW 4 http jsfiddle net maniator ScTAW 4 我有这个js var storage function var store
  • 如何在 git 中仅获取唯一的提交

    我想获取所有分支中唯一提交的列表 但是如果有人在分支中使用 rebase 则会提交松散的父项 如何解决这个问题呢 如何获取进行独特更改的提交列表 I use git log oneline graph cherry pick left ri
  • 在 iOS 7 中,我可以使用 Apple 推送通知服务让我的应用执行某些操作而不通知用户吗

    我的算法希望这样工作 如果我的服务器上发生了一些所需的事件 那么我希望向我的应用程序的每个用户 前台或后台 发送少量数据 但是 我希望我的应用程序对数据进行一些计算并确认服务器 而不是通知用户 请记住 不得通知用户 您可以使用content
  • 使用knife ec2插件在VPC私有子网中创建虚拟机

    尽管我已经写了相当多的 Chef 文章 但我对 AWS VPC 和管理网络流量 尤其是堡垒主机 还相当陌生 使用 Knife ec2 插件 我希望能够从我的开发人员工作站动态创建和引导虚拟机 VM 应能够存在于我的 VPC 的公有子网或私有
  • 使用 Bot Framework 记录 Node.js-Azure 应用程序

    我有一个托管在 Azure 上的节点应用程序 Bot Framework 机器人 记录调试信息的最佳方法是什么 例如 据我所知 使用console log 没有帮助 因为 Azure 中没有可供查看的控制台 我也不想打电话session s
  • seq 使用逗号作为小数点分隔符

    我注意到一个奇怪的现象seq我的一台计算机 Ubuntu LTS 14 04 上的行为 不是使用点作为小数点分隔符 而是使用逗号 seq 0 0 1 0 2 0 0 0 1 0 2 我的另一台 PC 上相同版本的 seq 8 21 给出了正
  • 无法通过 SSH 连接到 Google 计算引擎

    我在一个新项目中设置了一个新的 Google Compute Engine 实例 我启动实例并使用命令gcloud init连接到我的项目 然后我使用命令sudo gcloud compute ssh instance 1 它引导我完成 S
  • PermissionError:[Errno 13]权限被拒绝:尽管在AWS EC2实例上正确运行,但无法在浏览器上打开Jupyter

    我已经在AWS ubuntu eu central 1b 上设置了一个EC2实例 端口 8888 自定义 tcp 规则 https 443 和 ssh 22 在 AWS 任何地方 上开放 我知道 chmod 400 key pem 和 ju
  • Spring Boot、logback 和logging.config 属性

    我正在 Spring Boot 项目中实现日志记录logback图书馆 我想根据我的 Spring 配置文件加载不同的日志配置文件 属性spring pofiles active 我有3个文件 logback dev xml logback
  • 如何使用 logger 命令记录到 Linux 中的特定文件?

    我将运行以下脚本 bin bash myprogram get exit code exitvalue log exit code value to var log messages logger s exit code of my pro
  • 有什么方法可以从 java.util.logging.Logger 输出中删除信息行吗?

    使用 java util logging Logger 将一些日志输出到控制台 如下所示 public static void main String args Logger logger Logger getLogger test log
  • Python 使用同一记录器记录多个文件

    这是我的场景 我想记录 my module 的活动 这需要根据执行的方法 例如 INPUT 和 OUTPUT 对两个不同的文件完成 所以我有两个处理程序 每个处理程序都指向不同的文件 my in log 和 my out log 具有相同的
  • 如何发现 Scala 远程 Actor 已死亡?

    在 Scala 中 当另一个 远程 actor 终止时 可以通过设置 trapExit 标志并以第二个 actor 作为参数调用 link 方法来通知一个 actor 在这种情况下 当远程参与者通过调用 exit 结束其工作时 第一个参与者
  • SSH IdentitiesOnly=yes 转发我的所有密钥

    我一生都无法弄清楚为什么我的 SSH 配置转发了错误的密钥 我有两把钥匙 我们会打电话给他们home rsa and work rsa 我做了以下事情 eval ssh agent ssh add K ssh home rsa ssh ad
  • gitlab 上的权限被拒绝(公钥)

    我的问题是我无法从 GitLab 推送或获取 不过 我可以克隆 通过 HTTP 或通过 SSH 当我尝试推送时出现此错误 权限被拒绝 公钥 致命 无法从远程存储库读取 从我看过的所有线程中 这是我所做的 在我的计算机上设置 SSH 密钥并将
  • 在centos上设置jenkins:ssh密钥和git的问题

    经历了很多问题 但似乎没有什么能解决我的问题 或者更准确地说 我不确定我是否正确地完成了整个事情 所以这里是 已安装centos 6 3操作系统 然后我按照以下指南安装詹金斯 https wiki jenkins ci org displa

随机推荐

  • 更改自动完成选择的热键

    在 Eclipse 中 我发现 Enter 是从内容辅助 自动完成列表中选择项目的热键非常烦人 特别是在没有行尾分号的 PyDev 中 按 Enter 键换行将给我在自动完成列表中选择的任何内容 Tab 是一个更好的选择热键 因为我不太可能
  • 如何从代码后面打开日期选择器的日历?

    我正在使用 WPF 和 C 来开发我的应用程序 在我的应用程序中 我有两个日期选择器 第一个日期选择器要求用户选择出发日期 第二个日历要求用户选择返回日期 所以我想做的是 在用户选择出发日期后 第二个日期选择器中的日历将打开 我可以知道打开
  • 将多个 QStyledItemDelegate 与样式表一起使用

    我正在使用双调度创建一个样式化的 QTreeView 来解析数据项的特定委托 这非常有效 我对 QStyledItemDelegate 的委托进行了子类化 以利用样式表 使设计人员能够在代码之外设置 UI 样式 不幸的是 我无法解决 CSS
  • 成功提交表单后更新状态后如何滚动到 AMP 顶部?

    我在 AMP 页面中创建了排序功能 现在当我请求对结果进行排序时 以及当我在成功提交表单后更新状态时 页面滚动位置保持不变 我希望每当排序完成后更新状态时页面都会滚动到顶部 这是我的代码
  • 带有遮罩层的 UIVisualEffectView

    我试图模糊 MKMapView 同时在其上方显示圆形蒙版 为了更好地形象化我的意思 你可以找到我当前状态的图片 这几乎显示了我想要的内容 但背景 地图 应该是模糊的 而这张图片中的情况并非如此 我尝试使用 UIVisualEffectVie
  • 为什么Subject.Dispose不处理当前订阅?

    嗨 我已经想了一段时间了Subject
  • 统计图像数量并比较相似度

    我正在编写一个名为 Memory 的游戏 其中包含随机顺序的 8 对图像 16 个图像 游戏开始时 16个必须显示相同的背景图像 玩家单击任何图块后 图块会从背景图像翻转为前景图像 如果两个前景图像相同 它们就会保留 如果两个前景图像不同
  • java中的try-catch-finally块

    根据我的理解 我想遵循最后释放资源的最佳实践 以防止任何连接泄漏 这是我在 HelperClass 中的代码 public static DynamoDB getDynamoDBConnection try dynamoDB new Dyn
  • Java:递归打印钻石

    如何使用 Java 在给定尺寸的情况下递归打印钻石 大小为 5 会产生 到目前为止我拥有的代码 public static void dia int statSize int size int count int statSizeLarge
  • x86 程序集:弹出一个值而不存储它

    在x86汇编中 是否可以从堆栈中删除一个值而不存储它 类似的东西pop word null 我显然可以使用add esp 4 但也许我缺少一个漂亮干净的 cisc 助记符 add esp 4 add rsp 8 is正常 惯用 干净的方式
  • Compact Framework 的 Zip 库选项?

    我的要求 支持 NET Compact Framework 2 0 和Windows Mobile 6 0 设备 只需将内容解压到存储卡上的目录即可 不需要创建 zip 文件 必须能够在企业 商业软件中使用 可以开源 但没有 GPL 或其他
  • 动态删除一系列 Excel 单元格中的空白

    我有一个命名的数据范围 称为 数据 我试图找到一个公式或数组公式 它将返回新的单元格范围中的数据 但会丢失所有空白行 i e data is row x y 1 A 77 2 3 B 23 4 A 100 5 我的新范围是 row x y
  • Android 中没有提示的蓝牙发现

    我可以使用以下代码在没有任何提示的情况下打开 关闭蓝牙 这个需要BLUETOOTH and BLUETOOTH ADMIN权限 boolean isEnabled bluetoothAdapter isEnabled if enable i
  • 即使我安装了它,也没有名为“Kivy”的模块

    据我所知 我已经安装了 Kivy 和所有需要的文件 但我仍然收到此错误消息 我不知道为什么 from kivy app import App from kivy uix gridlayout import GridLayout class
  • 四色定理美国地​​图的Java实现

    我试图为每个状态分配一种颜色 以便没有两个相邻的状态共享相同的颜色 http en wikipedia org wiki Four color theorem http en wikipedia org wiki Four color th
  • 如何将 ICC 添加到现有 PDF 文档

    我有一个使用 CMYK 颜色的现有 PDF 文档 它是使用我获得的特定 ICC 配置文件创建的 如果我在配置文件处于活动状态时打开文档 则颜色明显不同 据我使用各种工具所知 文档中没有嵌入 ICC 配置文件 我想做的是将 ICC 配置文件嵌
  • 加密/解密大文件 (.NET)

    我必须加密 存储然后解密大文件 最好的方法是什么 我听说 RSA 加密很昂贵 建议使用 RSA 加密 AES 密钥 然后使用 AES 密钥加密大文件 任何带有示例的建议都会很棒 一种有机体很大 另一种有机体很小 尽管我们看到它时都知道它很昂
  • MySQL 中复杂的 COUNT 查询

    我正在尝试查找特定用户拥有的视频积分数量 以下是相关的三个表 CREATE TABLE userprofile userprofile id int 11 NOT NULL AUTO INCREMENT full name varchar
  • pandas 绘图值以降序计数 barplot [重复]

    这个问题在这里已经有答案了 我有一个数据框 我试图计算每个值的出现次数 我将其绘制为水平条 但无法对其进行排序 df pd DataFrame A A A B B C columns letters df value counts A 3
  • 当某些后台进程仍在运行时,命令“exit”不起作用

    退出 命令不适用于我的情况 我不明白为什么 ssh user mysever lt lt HEREDOC echo 1 Running PM2 log pm2 log echo 2 PM2 log is now in background