0

我首先在分离模式下启动 node_a,然后启动 node_b 控制台并使用 JCL(Ctrl+G) 连接到 node_a,然后我使用 application:start/1 启动应用程序。然后我看不到应用程序中的每个 io:format 输出。如何解决这个问题?

4

2 回答 2

0

您可以为此使用 erlang 函数 group_leader(Group_leader,Pid) 。这里有一个小例子:

在一个控制台中,我运行该函数:

ploop(I) ->
  io:format("mess num ~p, group_leader is ~p~n",[I,group_leader()]),
  receive
    stop -> io:format("bye bye~n"); 
    {group,P,F} ->
      group_leader(P,self()),
      F ! group_changed,
      ploop(0)
  after 5000 ->
    ploop(I+1)
  end.

在连接到远程外壳后的第二个控制台中,我发送消息:

PD ! {group,group_leader(),self()}.

其中 PD 是进程 ploop 的 pid,仅此而已。但这必须为您想要捕获 io:format 的所有进程完成。您可以使用 processes() 的结果来执行此操作,但我没有验证它。

于 2013-06-25T07:26:08.230 回答
0

而不是使用io:formatlager这样的日志记录解决方案,并执行tail -f console.log查看更新到 STDOUT 输出的操作。如果我没记错的话/dev/null,默认情况下 STDOUT 会发送到一个分离的节点上(如果你不使用像 lager 这样的日志记录解决方案)。

如果您想使用远程 shell 并查看直接输出,您可以使用io:fwrite(user,"the result is ~w\n",[X]).

于 2013-06-25T06:08:43.900 回答