`
mozhenghua
  • 浏览: 324515 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

erlang 监控远程pid

 
阅读更多

问题1:

 

在node A上启动一个erlang节点并且等待接收消息,然后在node B上向node A发送一条消息:

 

 {java ,'testt@aliyun-18097n'}!ddddd.

 node A 上可以收到消息。

 

但是当使用BIF is_pid({java,'testt@aliyun-18097n'}). 返回的是false,说明系统不认为{java,'testt@aliyun-18097n'}这个是一个pid。

 

所以在调用下面的命令的时候都会报同样的badarg错误:

 

 

register(remotejava,{java,'testt@aliyun-18097n'}).

 

 

link({java,'testt@aliyun-18097n'}).

都会报这样的错误:

 

** exception error: bad argument
     in function  link/1
        called as link({java,'testt@aliyun-18097n'})。
 

问题2:

    执行以下命令可以正常执行

 

link( spawn(fun()-> void end))

 

    但是分开执行之后

 

Pid = spawn(fun()-> void end).
link(Pid).

 

   却报告错误,比较迷惑呀

   网上查了erlang的官方文档,http://www.erlang.org/doc/man/erlang.html

 里面对link函数的定义是这样的:

 

  link(Pid) -> true

Types:

Pid = pid() | port()
Creates a link between the calling process and another process (or port) Pid, if there is not such a link already. If a process attempts to create a link to itself, nothing is done. Returns true.

If Pid does not exist, the behavior of the BIF depends on if the calling process is trapping exits or not (see process_flag/2):

If the calling process is not trapping exits, and checking Pid is cheap -- that is, if Pid is local -- link/1 fails with reason noproc.
Otherwise, if the calling process is trapping exits, and/or Pid is remote, link/1 returns true, but an exit signal with reason noproc is sent to the calling process.

 

以上这两个问题,根源其实是相同的,那就是像以下是那个对象本质是不同的

 

  1. {java ,'testtiliyun-18097n'}元组
  2. spawn 函数的返回值 pid
  3. register注册别名之后的 进程原子替换符

 

虽然他们后面都能跟“!”这个符号向进程发送消息,但并不能说明在使用代码中可以相互替换使用。

 

比如:link/1 函数的参数必须是 pid 或者port,除此之外的其他类型的参数都会报错。所以这就能解释为什么以下的代码执行是有问题的:

 

register(pid1,spawn(fun()-> void end)).
link(pid1).

 

 和

 

link({java,'testt@aliyun-18097n'}).
 

 

另外,还需要讲一下link和monitor的区别:
    link 是将两个进程链接起来,只要其中任何一个进程挂了就是通知到另外一个进程。而monitor的工作机制是 monitor端进程如果挂了的话不会影响到 被监控端的运行。

 

分享到:
评论

相关推荐

    erlang编程 Introducing Erlang

    Erlang中的链接(Linking)和监控(Monitoring)机制允许进程间建立关系,以便在另一进程崩溃时得到通知。链接用于追踪相关进程的状态,而监控则可以观察进程的生存状态。 ### 5. 消息传递 Erlang的进程间通信主要...

    erlang25.0 windows版本

    - **OTP(Open Telephony Platform)**:Erlang的核心库,包含大量预先设计的模块,用于处理常见的系统任务,如错误处理、分布式计算和监控。 - **行为模式**:如GenServer、GenEvent和Gen_fsm,它们定义了Erlang中...

    erlang深度分析.pdf

    Erlang的监控机制允许进程监控其它进程的状态,以便系统能够在进程失败时进行相应的处理。 #### 15. 性能与资源优化 Erlang的工具箱提供了多种性能优化工具,比如ETS和Dets的选择,以及erts_debug模块,可以帮助...

    erlang9.rar

    OTP是Erlang语言的一个框架,提供了多种库和工具,包括进程管理、分布式计算、错误恢复和性能监控等功能。 标题中的"erlang9.rar"是一个压缩文件,包含了Erlang 9的Windows 64位安装程序。"otp_win64_20.0.exe"是...

    erlang otp in action 书上的 代码

    erlang otp in action 代码

    erlang_版本24.3.4.4

    Erlang是一种面向并发的、函数式编程语言,由瑞典电信设备制造商Ericsson开发,主要用于构建高可用性、分布式和实时系统。版本24.3.4.4是Erlang的一个更新版本,包含了对先前版本的改进和修复。Erlang以其强大的错误...

    Erlang/OTP 26.2.1

    Erlang/OTP 26.2.1,Erlang,OTP,26.2.1

    两本erlang电子书

    第二部分深入探讨OTP,讲解其设计原则和组件,如行为(Behaviours)、分布式编程和监控。最后,第三部分通过构建实际项目,演示如何在实际环境中应用Erlang和OTP,涵盖了从系统设计到部署的全过程。 《Erlang程序...

    erlang资源

    这个“erlang资源”包含两本PDF书籍——《Erlang并发编程》和《Erlang入门手册》,它们是深入理解和学习Erlang语言的关键资料。 《Erlang并发编程》这本书可能涵盖了以下知识点: 1. **并发模型**:Erlang的并发...

    erlang22最新下载包

    Erlang是一种面向并发的、函数式编程语言,由瑞典电信设备制造商Ericsson为了实现分布式实时、高可靠性系统而开发。Erlang以其强大的并行处理能力、容错性和易于构建大规模分布式系统的特点,在电信、金融和互联网等...

    erlang安装包.zip

    erlang安装包

    Erlang官网下载过慢

    Erlang是一种面向并发的、函数式编程语言,主要用于构建高度可扩展的、容错性强的分布式系统。在IT行业中,Erlang因其强大的实时性和处理大量并发连接的能力而被广泛应用于电信、互联网基础设施和实时系统。RabbitMQ...

    xiandiao_erlang_Erlang课后习题_

    【Erlang编程语言及其应用】 Erlang是一种并发式、函数式的编程语言,由瑞典电信设备制造商Ericsson开发,最初用于构建高可用性、容错性和可扩展性的分布式系统。"xiandiao_erlang_Erlang课后习题_"这个压缩包文件...

    erlang 21.3

    OTP包含了许多模块,如进程管理、分布式计算、监控、错误恢复等,是Erlang开发的核心部分。"tar.gz"文件是Linux系统中常见的归档格式,它使用tar工具将多个文件打包,并使用gzip压缩算法进行压缩,以便于下载和存储...

    RabbitMQ3.9.13和ErLang24.2版本

    **RabbitMQ 3.9.13与Erlang 24.2 版本详解** RabbitMQ是一款开源的消息代理和队列服务器,它使用AMQP(Advanced Message Queuing Protocol)协议,广泛应用于分布式系统中的消息传递。RabbitMQ 3.9.13是该软件的一...

    Erlang和RabbitMQ安装包

    5. **OTP(Open Telecom Platform)**:Erlang OTP是一套库和设计原则,提供了如行为模式(gen_server, gen_event等)、监控和分布式管理工具,简化了复杂系统的构建。 **RabbitMQ** RabbitMQ是基于AMQP(Advanced...

    ErlangB和ErlangC计算工具(exe可执行文件+excel两个)

    Erlang B和Erlang C是电信领域中两种重要的流量模型,用于预测和分析通信系统中的呼叫处理能力和拥塞情况。这两个模型由丹麦工程师Agner Krarup Erlang在20世纪初提出,至今仍广泛应用于现代通信网络的设计与优化。 ...

    Erlang 20.3linux安装包

    Erlang是一种面向并发的、函数式编程语言,主要用于构建高度可扩展的、容错性强的分布式系统。在IT行业中,Erlang因其强大的实时性、并发性和内存管理机制而被广泛应用于网络通信、数据库系统以及消息中间件,如...

    erlang otp25 win安装包

    erlang otp25 win安装包

    erlang四大behaviour之四-supervisor

    Erlang Supervisor是Erlang四大Behaviour之一,主要负责管理监控树(supervision tree)中的子进程,确保系统的稳定运行。在Erlang并发模型中,通过Supervisor可以实现进程间的容错机制,即当某个进程出现故障时,...

Global site tag (gtag.js) - Google Analytics