从 shell 与正在运行的进程通信

Posted

技术标签:

【中文标题】从 shell 与正在运行的进程通信【英文标题】:Communicating with a running process from shell 【发布时间】:2016-10-25 13:14:00 【问题描述】:

我在 linux 环境中运行一个大型计算应用程序。我的目标是创建一个可以从 shell 窗口与应用程序通信并从应用程序获取结果并将其打印到 shell 中的接口。

假设我有一个将质数无限写入文件的应用程序。一段时间后,如果您想知道应用程序在做什么,是否可以创建一个界面,例如,

$[ pid ] "Display current number in check";
$The number, 17559323 is currently checked if its a prime.

我故意在提示符中有一个“$”,因为普通用户应该可以进行交流。信号需要特权执行。由于我可能有许多运行此应用程序的实例,因此我不知道套接字如何真正提供帮助,因为我想专门与该进程交谈以获取状态。 从 shell 与正在运行的进程进行通信的任何方向都将非常有帮助。

【问题讨论】:

您可以让您的应用程序在套接字上侦听命令。客户端程序可以连接到该套接字、发送命令、读取响应并将它们显示给用户。如果您有多个应用程序实例正在运行,只需让每个实例打开一个套接字(可能以 PID 或其他名称命名它们)。 这并没有给我我正在寻找的无客户端界面。它还需要有一个小型客户端应用程序浮动,以便我的同行与应用程序进行通信。这意味着工具集不是自包含的。 (也不支持 bash stdin/out 等操作系统工具) 所以不是一个套接字,而是一个嵌入式 http 服务器。现在您可以使用curl 查询它。 @larsks .. 这是一个有趣的想法,我一定会记住这个技巧。但在这种情况下,我将不得不管理端口号问题。首先要弄清楚如何让这个应用程序将端口号告诉外界(可能是一个小日志文件),如果我运行多个实例,这个在运行时选择未使用的端口号并将其传达给用户似乎不是一个可行的解决方案。但尽管如此,它还是以某种方式解决了目的。谢谢。我会继续寻找更好的解决方案。 【参考方案1】:

使用日志:客户端可以grep(或tail)这个日志来查看现在发生了什么。您可以始终写入日志文件或制作一个信号处理程序,在接收到信号后将所需信息转储到文件中。

【讨论】:

这不回答通过 shell 与正在运行的进程进行通信的任何部分。对于正在运行的进程,写这样的日志是 1. 如果没有人轮询该实例执行的状态,效率非常低, 2. 由于硬盘读写周期,它会减慢应用程序, 3. 只会转储空间。主要目的是信息轮询,而不是执行记录。

以上是关于从 shell 与正在运行的进程通信的主要内容,如果未能解决你的问题,请参考以下文章

JAVA线程与线程进程与进程间通信

进程间通信方式

Linux进程间的通信

进程间通信:一台服务器多客户端

进程与进程间通信

如何创建一个新进程并使用共享内存与之通信