gpt4 book ai didi

erlang - erlang 是否记录进程何时启动?

转载 作者:行者123 更新时间:2023-12-04 18:44:41 27 4
gpt4 key购买 nike

我正在监视一个 Erlang 应用程序,我目前正在尝试确定特定 PID 已经运行了多长时间。绝对时间戳或持续时间对我有用,但我在 process_info 或通过 sys 模块看不到这些数据位中的任何一个。有没有办法从 Erlang VM 中获取这些信息?

我可以从 ps 命令获取整个 VM 的启动时间,但这对单个 Erlang 进程没有任何可见性。

编辑:

我注意到当虚拟机崩溃时,erl_crash.dump 包含每个进程的启动时间戳,所以我知道它就在那里!

最佳答案

tl; dr:是的,但你无法做到。

如果您深入了解 https://github.com/erlang/otp 的 OTP 源代码,您会发现(通过搜索“erl_crash”)负责编写故障转储的文件名为 erts/emulator/beam/break.c .

在该文件中搜索“started”(这是一个很好的猜测,并且它出现在故障转储中)将带您到 lines 248-249 (基于 OTP-18.3.1 标签的所有行号),如下所示:

approx_started = (time_t) p->approx_started;
erts_print(to, to_arg, "Started: %s", ctime(&approx_started));

在源代码的其余部分中搜索 approx_started显示它在 erts/emulator/beam/erl_process.h 中声明作为 struct process 的成员.写在 erts/emulator/beam/erl_process.c . 仅限 阅读地点在 break.c ,在编写故障转储时。

所以,是的,Erlang 确实记录了进程启动的(大约)时间。但是,不,你不能得到它。

我不知道为什么它是“近似的”。

关于erlang - erlang 是否记录进程何时启动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17067958/

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