当两者都在运行时,如何将消息从一个 shell 脚本发送到另一个 shell 脚本?

Posted

技术标签:

【中文标题】当两者都在运行时,如何将消息从一个 shell 脚本发送到另一个 shell 脚本?【英文标题】:How to send a message from one shell script to another shell script when both are running? 【发布时间】:2021-08-27 19:01:31 【问题描述】:

我在后台运行了 3 个 shell 脚本。 Shell 脚本 1 打印一条消息“Hello 1”。 shell 脚本 2 和 3 也在后台运行。我给 shell 脚本 1 发出了 kill 命令。现在我在 shell 脚本 2 中使用 pgrep 命令来知道脚本 1 没有运行。

当它们都已经在后台运行时,如何从脚本 2 通知脚本 3?一旦脚本 2 通知脚本 3,它应该开始打印“Hello 3”。这是我必须完成的全部任务。

【问题讨论】:

谷歌“命名管道” 最简单的解决方案是平面文件或命名管道,尽管对于其中任何一个,您还需要了解如何解决并发问题(例如,研究flock);如果您有一个(RDBMS)数据库可供(简单)使用,您可以利用 RDBMS 的内置锁管理来序列化“共享”表/行上的读/写;变得更复杂......考虑使用排队系统......然后是共享内存(尽管此时您可能正在谈论专门的(编译)编程) 我是一个完整的初学者。你说的所有这些术语对我来说都是新的。 进程间通信并不完全是一个“初学者”主题,所以......你是如何想出这个特定的任务/练习的?这是家庭作业吗? SO 不是寻找(类似于课堂)有关进程间通信的指导的正确位置;在interprocess communications 上的谷歌搜索带来了很多点击(比如wikipedia article,它可以作为学习上述主题的起点 【参考方案1】:

信号是 Unix /Linux 系统使用的最古老的进程间通信方法之一。它们用于向一个或多个进程发送异步事件信号。

pgrep 检测到您要查找的条件时,您可以从script2script3 发送信号。

看看

help kill

help trap

【讨论】:

以上是关于当两者都在运行时,如何将消息从一个 shell 脚本发送到另一个 shell 脚本?的主要内容,如果未能解决你的问题,请参考以下文章

WebSocket 在 1000 条消息后关闭

text 当试图从Jenkins运行shell时,如何解决“sudo:没有tty存在且没有指定askpass程序”

从 AWS Lambda 发送 RabbitMQ 消息

我创建了两个功能,两者都在工作,但是当我把它们放在一起时,它们就不行了

如何使用 GraphQL 构建 TypeScript+React 应用

如何将进程脱离于shell运行?