Nehmen wir an, ich habe einen Prozess p1 und p2. Wenn p1 endet, möchte ich auch, dass p2 endet (p2 wartet auf eine Eingabe von dem Benutzer unter Verwendung von io:get_line()
, wenn p1 endet). Ich kann p1 erfolgreich beenden, indem ich die Funktion einfach selbst beenden lasse (keinen Code mehr, der ausgeführt werden soll), aber wie soll ich p2 beenden, das auf eine Eingabe mit p1 wartet?Wie beende ich einen Prozess in io: get_line?
Dies sind die Codes für die beiden Prozesse:
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.
Nachdem eine Eingabe von dem Benutzer zu empfangen, wird die Nachricht an die Prozesse MSG1 und msg2 (Chat_Node) gesendet. Wenn die Nachricht "tschüss" ist, wird der Prozess mit "tschüss" beendet.
sich p1 Ende sagen und es wird von p2 überwacht mit 'MonitorRef = erlang: Monitor (Prozess, P1)'. Wie kann p2 '{'DOWN', MonitorRef, process, P1, Reason} verwenden, damit p2 sich selbst beenden kann? – wency
Ich habe meine Antwort bearbeitet – Pascal
Vielen Dank, dass ich schon verstanden habe, wie man Monitore verwendet. Problem ist, dass p2 auf eine Eingabe vom Benutzer mit 'io: get_line() 'wartet, wenn p1 beendet wurde. So, jetzt weiß ich nicht, wie man p2 beendet, wenn p1 endet. Danke trotzdem. – wency