【问题标题】:How to send/receive messages between processes with pid如何使用 pid 在进程之间发送/接收消息
【发布时间】:2013-11-29 06:24:08
【问题描述】:

如何在只知道它们的 pid 的进程之间发送和接收消息? 没有分配共享队列或邮箱或没有将映射 pid 映射到套接字端口...... 也许我要问的是非常低的水平(也许是操作系统级别),但我对此很感兴趣。 谢谢

【问题讨论】:

  • 您指的是哪个操作系统? Windows 有PostThreadMessage,POSIX 系统有kill
  • 我的意思是 Posix/Unix...kill 用于信号,不是吗?我指的只是消息...
  • 或者直接消息传递,点对点
  • “消息”是一个广义术语。只需一个 pid,无需任何准备,您就可以发送信号。就这样。发送任何数据都需要一些额外的操作系统对象(套接字、消息队列、文件等)。但是,为什么不打开由 pid 标识的 UNIX 域套接字呢?
  • 让一个进程创建一个 UNIX 域套接字,例如,在 /tmp/,并监听它。其他进程可以向套接字发送消息。我认为 DGRAM 插座更适合。

标签: message-queue messaging message-passing


【解决方案1】:

在 linux 上,您可以打开文件 /proc/[pid]/fd/0 以使用 pid [pid] 访问进程的标准输入。您还可以通过将0 更改为其他内容来打开进程上的任意文件描述符。

【讨论】:

  • 不错。但是stdin不是映射到0文件描述符,而不是1吗?此外,对于交互式进程,它的输入将被符号链接到终端设备(如 /dev/pts/1),写入它只会在终端输出数据,而不是将其输入标准输入。
  • 你是对的,我错了,它是文件描述符0。但是/proc/[pid]/fd 目录中存在的文件是文件描述符本身的符号链接。测试一下,它可以工作。
  • 我刚刚用我的外壳测试了它。将任何内容发送到它的 fd/0 只是将其打印出来,而不是让 shell 执行输入。这是因为 shell 的描述符都符号链接到 /dev/pts/1。但它确实有效,例如,对于流水线流程(我可以在流水线中间编写)。
  • 有趣。可能这与 bash 如何处理重定向有关。但是echo ls >> /proc/<pid-of-shell>/fd/0 对我不起作用。
  • 这可能与 readline 的实现方式有关。如果它直接连接到终端设备而不是文件描述符,那就可以解释问题了。
猜你喜欢
  • 2013-08-03
  • 2016-08-01
  • 1970-01-01
  • 2021-06-02
  • 2013-08-13
  • 1970-01-01
  • 2016-05-20
  • 2012-08-12
  • 2011-07-05
相关资源
最近更新 更多