假設我有一個進程p1和p2。當p1結束時,我也希望p2結束(當p1結束時,p2正在等待來自用戶的使用io:get_line()
的輸入)。我可以通過讓函數自行結束(不需要執行更多代碼)來成功結束p1,但是我想如何結束等待使用p1的輸入的p2?如何在io中終止進程:get_line?
這些是兩個過程的代碼:
chat1(2,Chat_Node,Name) ->
timer:sleep(100),
Message = io:get_line(io_lib:format("~s: ", [string:strip(Name,right,$\n)])),
case re:replace(Message, "\\s+", "", [global,{return,list}]) == [$b,$y,$e] of
true ->
Chat_Node ! bye;
false ->
Chat_Node ! {Name, Message},
chat1(2, Chat_Node, Name)
end.
chat2(2,Chat_Node,Name) ->
timer:sleep(100),
Message = io:get_line(io_lib:format("~s: ", [string:strip(Name,right,$\n)])),
case re:replace(Message, "\\s+", "", [global,{return,list}]) == [$b,$y,$e] of
true ->
{msg1, Chat_Node} ! bye;
false ->
{msg1, Chat_Node} ! {Name, Message},
chat2(2, Chat_Node, Name)
end.
接收來自用戶的輸入後,將消息發送到所述過程MSG1和MSG2(Chat_Node)。如果該消息是「再見」,則具有「再見」的過程將結束。
假設P1結束,它是由P2使用'MonitorRef =二郎監視:監視(過程中,P1)'。 p2如何使用'{'DOWN',MonitorRef,進程,P1,Reason}'所以p2可以自行終止? – wency
我編輯了我的答案 – Pascal
謝謝我已經瞭解瞭如何使用顯示器。問題是當p1結束時,p2正在等待來自用戶的使用'io:get_line()'的輸入。所以現在,我不知道如何在p1結束時結束p2。不過謝謝。 – wency