gpt4 book ai didi

erlang - 默认进程标志

转载 作者:行者123 更新时间:2023-12-03 13:43:59 27 4
gpt4 key购买 nike

有没有办法指示 Erlang VM 将一组进程标志应用于系统中产生的每个新进程?

例如在测试环境中,我希望每个进程都有 save_calls 标志设置。

最佳答案

一种方法是将 Erlang 跟踪功能与 .erlang 文件结合起来。

具体来说,您可以使用 erlang:trace/3 提供的低级跟踪功能。或者你可以简单地利用 dbg:tracer/2函数来创建一个新的跟踪进程,该进程在每次收到跟踪消息时执行您的自定义处理程序函数。

为了使事情自动化一点,您可以在运行代码的目录或主目录中创建一个 Erlang 启动文件。 Erlang 启动文件是一个名为 .erlang 的特殊文件,每次启动运行时系统时都会执行该文件。

像下面这样的东西应该可以完成这项工作:

% -*- Erlang -*-
erlang:display("This is automatically executed.").
dbg:tracer(process, {fun ({trace, Pid, spawn, Pid2, {M, F, Args}}, Data) ->
process_flag(Pid2, save_calls, Data),
Data;
(_Trace, Data) ->
Data
end, 100}).
dbg:p(new, [procs, sos]).

基本上,我正在创建一个新的跟踪进程,它将跟踪进程(第一个参数)。我正在指定要执行的处理程序函数和一些初始数据。在处理函数中,我设置了 save_calls新产生的进程的标志,而我忽略所有其他跟踪消息。我设置了 save_calls ' 选项到 100 ,使用初始数据参数。在最后一次通话中,我告诉 dbg 我只对新创建的进程感兴趣。我也在设置 sos ( set_on_spawn ) 选项以确保跟踪标志的继承。

最后,请注意您需要如何使用 process_flag 的变体函数,它需要一个额外的参数(要为其设置标志的进程的 Pid)。

关于erlang - 默认进程标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11790193/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com