Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux / 解决Linux下Erlang关闭port同时也关掉与其连接的C语言进程

在Linux平台下,erlang通过普通端口与c语言进行通信时,当erlang主动调用BIF port_close关掉端口时,在linx下执行ps -e|grep cPort后,c语言进程并没有退出。此现象称erlang中port胡“僵尸”进程问题。认真分析后发现在关闭port时,在stdin上会得到一个eof,而c进程无法据此退出。c语言进程根据feof(0),可以检测到端口关闭,然而当erlang通stdin向c语言发消息时,stdin同样会得到eof,当c语言检测到eof时,无法区分是端口关闭还是erlang发消息,这种方法会出现一种现象每当erlang向c语言发消息,c进程都会退出,不能连续发消息;为此寻求新的解决方法,经过探索终于发现借助于信号机制,当erlang关闭端口时,会关闭stdin(将stdin设eof),c语言在stdin关闭的情况下,再次写管道时(stdout)时,会收到SIGPIPE信号,按正常情况,进程收到SIGPIPE后会退出,然而linux下该进程并没有退出,需要通过signal函数捕获该信号后,强制exit(0),让进程退出。总结:erlang的port_close过程做了二件事:一是将stdin置feof;二是将stdin关闭,在windows下c进程只要保持对stdin的侦听,只要erlang关闭port,c进程马上退出;在linux平台下,c进程需要保持对stdin和stdout的侦听,在port_close时,会收到SIGPIPE信号,据此信号判断erlang端口关闭,然后强行将自己退出。更多详情见请继续阅读下一页的精彩内容: http://www.linuxidc.com/Linux/2013-11/92638p2.htmErlang 的详细介绍:请点这里
Erlang 的下载地址:请点这里相关阅读:在CentOS上编译安装Erlang R15B http://www.linuxidc.com/Linux/2012-03/57663.htmUbuntu 11.10 搭建Erlang环境 http://www.linuxidc.com/Linux/2012-04/58208.htm在 CentOS 5.7 上通过 YUM 安装 Erlang 过程 http://www.linuxidc.com/Linux/2012-12/75622.htmErlang---启动参数学习/研究 http://www.linuxidc.com/Linux/2011-07/39157.htmCentOS 5.5 下源代码编译安装 Erlang http://www.linuxidc.com/Linux/2011-07/39156.htmUbuntu 10.10下源码安装Erlang 5.8.3版本 http://www.linuxidc.com/Linux/2011-04/34863.htm在 CentOS 6.4上安装Erlang http://www.linuxidc.com/Linux/2013-06/85964.htmUbuntu 下 Erlang R16B 的安装 http://www.linuxidc.com/Linux/2013-05/84235.htm