我想知道的是,如果控制进程是使用gen_tcp:controlling_process(Socket, Pid),
创建的,并且在什么情况下套接字发送此消息{tcp_closed, Socket}
,套接字关闭时进程Pid
是否终止?有没有一种方法可以防止服务器端的套接字关闭,或者总是正常?还有什么具体的方式来终止知道Pid
的过程吗?Erlang:什么时候进程终止以及gen_tcp:controlling_process(Socket,Pid)如何工作?
1
A
回答
5
gen_tcp:controlling_process(Socket,Pid)用于将Socket的控制权交给进程Pid。它在Socket关闭时没有提到这个过程的行为。
有案件需要考虑:
你在这种情况下,模式{活跃,假}打开服务器套接字服务器将知道该Socket被关闭时,它调用的函数调用gen_tcp: recv(Sock,Len)得到答案{error,closed}而不是预期的{ok,Binary}。如果您打算使用gen_tcp:controls_process(Socket,Pid),我建议您使用此模式,因为它可以避免代码中的竞争条件。
您在模式{active,true}或{active,once}下打开服务器Socket,在这种情况下,服务器将收到一条消息{tcp_closed,Socket}。在这种情况下,有一个竞争条件看题目Erlang: Avoiding race condition with gen_tcp:controlling_process
我不认为这是服务器的作用,防止任何套接字关闭,而是随时准备接受连接。
最后总是可以终止一个进程,使用自己的协议来平滑结束,例如Pid! {停止,理由}或者使用退出(Pid,Reason)更残酷的方式。
相关问题
- 1. 如何使用pid终止Python进程?
- 2. 什么是HOPOPT协议,以及socket()如何工作?
- 3. 如何检查Linux进程以确定进程何时/何时终止/终止?
- 4. 为什么os.kill(pid,0)返回无,但进程已终止?
- 5. 什么时候“open”命令终止?
- 6. 确定终止进程的PID
- 7. Python - 终止子进程或PID?
- 8. 线程在调用TerminateThread时实际终止了什么时候?
- 9. Erlang完成或终止进程
- 10. 父进程在C#中终止时如何终止子进程
- 11. 如何在特定的PID下终止Java中的进程
- 12. 进程在其父进程sshd终止时发生了什么?
- 13. KineticJS:我什么时候使用toImage()以及什么时候使用缓存()
- 14. 什么时候以及如何去执行缓存在asp.net mvc?
- 15. 什么时候$ wp_query已初始化,以及如何覆盖它?
- 16. 什么时候会调用InstanceIDListenerService以及如何测试它?
- 17. 我如何知道什么时候正在创建进程并阻止其在Windows中执行或终止它?
- 18. 超时后,终止进程及其所有子进程
- 19. 为什么后台进程组死的时候终端关闭
- 20. 通过PID在Erlang中杀死进程
- 21. 什么是进程和更新以及它如何在primefaces中工作
- 22. 该程序如何工作以及为什么答案 - (4)C++
- 23. 什么时候应该使用*以及何时&?
- 24. Idiomatic C#:什么时候返回null以及何时返回NaN
- 25. 什么时候使用viewDidLoad以及何时使用awakeFromNib
- 26. 什么时候应该使用require()以及何时使用define()?
- 27. 什么时候使用emplace *以及何时使用push/insert
- 28. 什么时候使用Task以及何时使用Thread?
- 29. 什么时候发送HttpSessionDestroyedEvent以及为什么
- 30. SqlCommand.Prepare()做什么以及它应该在什么时候使用?