我有一个通过 JInterface 发送我的 erlang gen_server 消息的 Java 进程。发送给我的消息包括在 Java 端创建的邮箱的 Pid。该 Pid 是有效的,因为我可以将消息发送回该 Pid,并且这些消息已成功存入 Javan 端邮箱。
但是,执行 monitor(process, Pid) 会产生即时 nodedown 消息 (noproc)。
有没有办法监控这个 Pid?
我有一个通过 JInterface 发送我的 erlang gen_server 消息的 Java 进程。发送给我的消息包括在 Java 端创建的邮箱的 Pid。该 Pid 是有效的,因为我可以将消息发送回该 Pid,并且这些消息已成功存入 Javan 端邮箱。
但是,执行 monitor(process, Pid) 会产生即时 nodedown 消息 (noproc)。
有没有办法监控这个 Pid?
Java 邮箱发送退出信号并断开任何指向它的链接,但据我所知不支持监视器。所以你可以链接到它,只是要小心,因为链接是双向的。
Java(和 C)节点与 Erlang 节点不同。它们是隐藏的,它们并没有实现 Erlang 节点所做的一切。特别是,它们没有实现监视器支持。
Erlang Distribution Protocol对此进行了记录:
11.7 distrvsn = 4 的新 Ctrl 消息 (OTP R6)
这些只能被 Erlang 节点识别,而不是隐藏节点。
MONITOR_P
...
OTP 实现了一种监控回退机制,用于在此类节点上对(伪)-gen_servers 执行调用。评论很有启发性:
%% Node (C/Java?) is not supporting the monitor.
%% The other possible case -- this node is not distributed
%% -- should have been handled earlier.
%% Do the best possible with monitor_node/2.
%% This code may hang indefinitely if the Process
%% does not exist. It is only used for featureweak remote nodes.