Erlang 为什么不使用escript显示派生进程的输出

Erlang 为什么不使用escript显示派生进程的输出,erlang,Erlang,请您告诉我,如果使用escript运行以下代码,为什么不使用标准输出 main(_) -> spawn(fun() -> io:fwrite("blah") end). 谢谢 fwrite在escript中运行时仍会写入标准输出,这里的问题是您的程序在生成的进程有机会运行之前终止 只

请您告诉我,如果使用escript运行以下代码,为什么不使用标准输出

main(_) ->                                                                                                 
    spawn(fun() -> io:fwrite("blah") end).

谢谢

fwrite
在escript中运行时仍会写入标准输出,这里的问题是您的程序在生成的进程有机会运行之前终止

只要
main
函数终止,escript就会终止,这取决于虚拟机如何安排生成的进程,您可能会执行,也可能不会执行
fwrite

对于您的示例,一个简单的解决方法是添加一些同步:

main(_) ->
  MainPid=self(),
  spawn(fun() -> io:fwrite("blah"), MainPid ! done end),
  receive
    done -> 
      ok
  end.

这会使主进程等待终止,直到生成的进程发送消息。

谢谢!在某些实际情况下,您将如何处理此类同步?比方说,等待main完成所有进程,直到指定进程死亡?您将需要类似的同步。e、 g.收集您应该等待的进程的id:s,在列表上循环
接收来自每个进程的消息。当列表为空时,所有进程都已完成。