- 浏览: 32906 次
- 性别:
- 来自: 北京
最新评论
-
liumengfan:
{beam_dynamic_libraries, get_dy ...
system_info模块 -
liumengfan:
{environment, [split_env( ...
system_info模块 -
liumengfan:
其中{environment_erts, os_getenv ...
system_info模块 -
liumengfan:
centos再安装erlang之前,先安装如下软件:yum i ...
SystemTap and Erlang: a tutorial -
liumengfan:
判断是否是内部port的程序:#define is_inter ...
erlang判断内部pid的方法
在看了Erlang新增全面的系统信息收集器-system_information模块之后,自己下载最新的代码,查看该模块,仔细看了一下
[list]{init_arguments, init:get_arguments()},对应的是vm的启动参数,详细信息参考文档中的erts中的init模块。
{code_paths, code:get_path()},对应的是加载到vm中模块的路径
{code, code()},对应的是加载路径内相应代码的详细信息:
当路径是一个application的路径时,对应的信息是:
{system_info, erlang_system_info()},对应的是调用erlang:system_info(Ele)获得信息列表,其中Ele组成的列表是:
{erts_compile_info, erlang:system_info(compile_info)},对应的信息参考erlang模块
{beam_dynamic_libraries, get_dynamic_libraries()},对应的是:vm依赖的动态库情况
{environment_erts, os_getenv_erts_specific()},对应的是:erts运行的环境变量
{environment, [split_env(Env) || Env <- os:getenv()]},对应的是所有的系统环境变量
[/list]
report() -> [ {init_arguments, init:get_arguments()}, {code_paths, code:get_path()}, {code, code()}, {system_info, erlang_system_info()}, {erts_compile_info, erlang:system_info(compile_info)}, {beam_dynamic_libraries, get_dynamic_libraries()}, {environment_erts, os_getenv_erts_specific()}, {environment, [split_env(Env) || Env <- os:getenv()]} ].
[list]
{application, {AppName, [ {description, proplists:get_value(description, Info, [])}, {vsn, proplists:get_value(vsn, Info, [])}, {path, Path}, {modules, [ {Mod, [ {loaded, Loaded}, {native, beam_is_native_compiled(Beam)}, {compiler, get_compiler_version(Beam)}, {md5, hexstring(Md5)} ]}]}]}}
[ allocator, check_io, otp_release, port_limit, process_limit, % procs, % not needed smp_support, system_version, system_architecture, threads, thread_pool_size, {wordsize,internal}, {wordsize,external}, {cpu_topology, defined}, {cpu_topology, detected}, scheduler_bind_type, scheduler_bindings, compat_rel, schedulers_state, build_type, logical_processors, logical_processors_online, logical_processors_available, driver_version, emu_args, ethread_info, beam_jump_table, taints ]
评论
3 楼
liumengfan
2013-07-31
{beam_dynamic_libraries, get_dynamic_libraries()},实际上执行的是系统命令
当是unix时执行otool -L beam.smp[beam,beam.debug.smp,beam.debug]
其他时执行ldd beam.smp[beam,beam.debug.smp,beam.debug]
获取Beam的代码如下:
其中erlang:system_info(build_type)返回的结果可能是以下可能,具体参见文档
get_dynamic_libraries() -> Beam = filename:join([os:getenv("BINDIR"),get_beam_name()]), case os:type() of {unix, darwin} -> os:cmd("otool -L " ++ Beam); _ -> os:cmd("ldd " ++ Beam) end.
当是unix时执行otool -L beam.smp[beam,beam.debug.smp,beam.debug]
其他时执行ldd beam.smp[beam,beam.debug.smp,beam.debug]
$ ldd /usr/local/lib/erlang/erts-5.10.2/bin/beam.smp linux-vdso.so.1 => (0x00007fff52c2b000) libutil.so.1 => /lib64/libutil.so.1 (0x000000392c400000) libdl.so.2 => /lib64/libdl.so.2 (0x000000391e400000) libm.so.6 => /lib64/libm.so.6 (0x000000391ec00000) libncurses.so.5 => /lib64/libncurses.so.5 (0x000000392d000000) libpthread.so.0 => /lib64/libpthread.so.0 (0x000000391f000000) librt.so.1 => /lib64/librt.so.1 (0x000000391f800000) libc.so.6 => /lib64/libc.so.6 (0x000000391e800000) libtinfo.so.5 => /lib64/libtinfo.so.5 (0x0000003931000000) /lib64/ld-linux-x86-64.so.2 (0x000000391e000000)
获取Beam的代码如下:
get_beam_name() -> Type = case erlang:system_info(build_type) of opt -> ""; TypeName -> "." ++ atom_to_list(TypeName) end, Flavor = case erlang:system_info(smp_support) of false -> ""; true -> ".smp" end, Beam = case os:getenv("EMU") of false -> "beam"; Value -> Value end, Beam ++ Type ++ Flavor.
其中erlang:system_info(build_type)返回的结果可能是以下可能,具体参见文档
opt | debug | purify | quantify | purecov | gcov | valgrind | gprof | lcnt | frmptr
2 楼
liumengfan
2013-07-31
{environment, [split_env(Env) || Env <- os:getenv()]},对应的细节是:
os:getenv()获得的结果是:
而转换后的结果是
split_env(Env) -> split_env(Env, []). split_env([$=|Vs], Key) -> {lists:reverse(Key), Vs}; split_env([I|Vs], Key) -> split_env(Vs, [I|Key]); split_env([], KV) -> lists:reverse(KV). % should not happen.
os:getenv()获得的结果是:
["module=() { eval `/usr/bin/modulecmd bash $*`\n}", "XAUTHORITY=/var/run/gdm/auth-for-liufan-RKsU4w/database", "COLORTERM=gnome-terminal","G_BROKEN_FILENAMES=1", "DISPLAY=:0.0","WINDOWPATH=1", "LESSOPEN=|/usr/bin/lesspipe.sh %s", "MODULESHOME=/usr/share/Modules", "DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-AjSkT7YKdz,guid=755d7685de583da75ff5da770000002a", "QTLIB=/usr/lib64/qt-3.3/lib","CVS_RSH=ssh", "LOGNAME=liufan", "GNOME_DESKTOP_SESSION_ID=this-is-deprecated", "HOME=/home/liufan","SHLVL=2", "SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass", "HISTCONTROL=ignoredups","GDMSESSION=gnome", "LOADEDMODULES=","KDEDIRS=/usr", "MODULEPATH=/usr/share/Modules/modulefiles:/etc/modulefiles", "GDM_LANG=zh_CN.utf8","PROGNAME=erl","LANG=zh_CN.utf8", "KDE_IS_PRELINKED=1","GNOME_KEYRING_PID=2988", "GDM_KEYBOARD_LAYOUT=us","XMODIFIERS=@im=ibus", [...]|...]
而转换后的结果是
{environment,[{"module", "() { eval `/usr/bin/modulecmd bash $*`\n}"}, {"XAUTHORITY", "/var/run/gdm/auth-for-liufan-RKsU4w/database"}, {"COLORTERM","gnome-terminal"}, {"G_BROKEN_FILENAMES","1"}, {"DISPLAY",":0.0"}, {"WINDOWPATH","1"}, {"LESSOPEN","|/usr/bin/lesspipe.sh %s"}, {"MODULESHOME","/usr/share/Modules"}, {"DBUS_SESSION_BUS_ADDRESS", "unix:abstract=/tmp/dbus-AjSkT7YKdz,guid=755d7685de583da75ff5da770000002a"}, {"QTLIB","/usr/lib64/qt-3.3/lib"}, {"CVS_RSH","ssh"}, {"LOGNAME","liufan"}, {"GNOME_DESKTOP_SESSION_ID","this-is-deprecated"}, {"HOME","/home/liufan"}, {"SHLVL","2"}, {"SSH_ASKPASS","/usr/libexec/openssh/gnome-ssh-askpass"}, {"HISTCONTROL","ignoredups"}, {"GDMSESSION","gnome"}, {"LOADEDMODULES",[]}, {"KDEDIRS","/usr"}, {"MODULEPATH", "/usr/share/Modules/modulefiles:/etc/modulefiles"}, {"GDM_LANG","zh_CN.utf8"}, {"PROGNAME","erl"}, {"LANG","zh_CN.utf8"}, {"KDE_IS_PRELINKED",[...]}, {[...],...}, {...}|...]}
1 楼
liumengfan
2013-07-31
其中{environment_erts, os_getenv_erts_specific()},对应的是:erts运行的环境变量涉及到的变量如下:
[ "BINDIR", "DIALYZER_EMULATOR", "CERL_DETACHED_PROG", "EMU", "ERL_CONSOLE_MODE", "ERL_CRASH_DUMP", "ERL_CRASH_DUMP_NICE", "ERL_CRASH_DUMP_SECONDS", "ERL_EPMD_PORT", "ERL_EMULATOR_DLL", "ERL_FULLSWEEP_AFTER", "ERL_LIBS", "ERL_MALLOC_LIB", "ERL_MAX_PORTS", "ERL_MAX_ETS_TABLES", "ERL_NO_VFORK", "ERL_NO_KERNEL_POLL", "ERL_THREAD_POOL_SIZE", "ERLC_EMULATOR", "ESCRIPT_EMULATOR", "HOME", "HOMEDRIVE", "HOMEPATH", "LANG", "LC_ALL", "LC_CTYPE", "PATH", "PROGNAME", "RELDIR", "ROOTDIR", "TERM", %"VALGRIND_LOG_XML", %% heart "COMSPEC", "HEART_COMMAND", %% run_erl "RUN_ERL_LOG_ALIVE_MINUTES", "RUN_ERL_LOG_ACTIVITY_MINUTES", "RUN_ERL_LOG_ALIVE_FORMAT", "RUN_ERL_LOG_ALIVE_IN_UTC", "RUN_ERL_LOG_GENERATIONS", "RUN_ERL_LOG_MAXSIZE", "RUN_ERL_DISABLE_FLOWCNTRL", %% driver getenv "CALLER_DRV_USE_OUTPUTV", "ERL_INET_GETHOST_DEBUG", "ERL_EFILE_THREAD_SHORT_CIRCUIT", "ERL_WINDOW_TITLE", "ERL_ABORT_ON_FAILURE", "TTYSL_DEBUG_LOG" ]
发表评论
-
erlang host address
2014-03-07 13:40 767在rabbitMQ看到一段关于转换地址的代码: 留着以后用 ... -
record小记
2014-03-06 17:46 660今天阅读rabbitMQ代码,遇到一段代码很疑惑: try ... -
Distributed Semaphores with RabbitMQ
2014-03-04 21:54 1376翻译自(http://www.rabbitmq.com/blo ... -
erlang的gdb调试
2013-07-08 21:00 1620当我们完成erlang的正常配置和编译后,我们可以构建一个de ... -
SystemTap and Erlang: a tutorial
2013-07-06 19:16 1239参照该文章安装SystemTap and Erlang: a ... -
列表[A||boolen]
2013-07-06 16:14 814今天读到riak_sysmon时, ... -
erlang的erl_eval
2013-07-05 13:56 1204自己尝试使用erl_eval做一些联系,发掘改模块的功能: ... -
使用erlang实现动态替换字符串中的变量
2013-07-05 13:18 1627通过erlang,我们可以使用 {ok, Ts, _} = e ... -
使用erlang的动态执行编写DSL
2013-07-05 12:54 1389今天看到Erlang 动态执行和erlang动态解释, 实验的 ... -
Erlang如何查看gen_server系列的状态 (高级)
2013-07-05 09:16 768引用Erlang如何查看gen_server系列的状态 (高级 ... -
通过port获取相应的节点名
2013-07-04 23:41 1024今天看了霸爷的节点间通讯的通道微调和谁引起busy_dist_ ... -
erlang的abstract_code代码
2013-07-04 21:04 701在看了霸爷的erlang的abstract code之后,自己 ... -
实验CPU密集型计算
2013-07-04 20:40 1271今天实验了一下霸爷博 ... -
erlang判断内部pid的方法
2013-07-04 13:48 1486在erl_term.h文件里: #define _TAG_ ... -
inet:setopts/2函数
2013-07-03 16:18 812下面引用霸爷的话,给自己做一个笔记 引用inet_drv内部每 ... -
erlang的内联编译
2013-07-02 23:42 1311今天再erlang inline 编译中读到erlang的函数 ... -
erlang:port_command函数
2013-07-02 22:10 3321今天读到褚霸博客里的g ... -
iolist类型
2013-07-02 21:47 843今天读到http://blog.yufeng.info的gen ... -
epmd的启动参数3
2013-07-01 21:28 1129和epmd相关的环境变量 ERL_EPMD_RELAXED_ ... -
epmd的启动参数2
2013-07-01 21:07 1099使用epmd的-port选项时,实验的例子是: [liuf ...
相关推荐
本项目“student_info_system”就是一个用VBA(Visual Basic for Applications)编写的实例,适用于毕业设计或教学实践,下面将详细介绍其核心知识点。 一、VBA基础 VBA是Microsoft Office套件内嵌的一种编程语言,...
system_calls库的具体功能和API会因库的实现而异,通常会包含一系列方法,如`system_call()`用于执行系统命令并返回结果,`get_system_info()`用于获取系统信息,以及可能存在的其他系统级别的操作。 需要注意的是...
【标题】"student_info_management_system_vb.rar" 是一个基于 VB.NET 开发的学生信息管理系统的压缩包文件。VB.NET 是 Microsoft .NET Framework 的一部分,它提供了一种面向对象的编程语言,用于创建桌面应用程序...
4. **LTE_GUI_pathloss_antenna_info.fig和LTE_GUI_pathloss_antenna_info.m**:这些文件可能与路径损耗和天线信息有关,用户可以通过GUI观察不同场景下的信号传播损失,以及天线配置对通信质量的影响。 5. **LTE_...
### WEB NCE SYSTEM VISCOLOR 1.1 知识点概述 #### 一、系统简介 VISCOLOR 是一款专为印刷业设计的黏度测量与调节系统。该系统具备高度灵活性,能够应用于多种印刷过程中液体黏度的测量,如出版凹版印刷机上的应用...
rplidar_ros是一个针对RoboPeak公司的RPLIDAR系列激光雷达(LIDAR)设备的ROS(Robot Operating System)驱动模块。它提供了与RPLIDAR交互的接口,使得用户能够在ROS环境中轻松地获取、处理和利用RPLIDAR的数据。...
`os_info.h`很可能是`os_info.c`的接口定义,定义了对外公开的函数和数据结构,供其他模块调用以获取内存信息。 通过这个接口,开发者可以轻松地集成到他们的应用程序中,获取到Linux系统当前的内存状态,比如总...
- **system_get_rst_info**:获取复位信息。此函数返回ESP8266最后一次复位的原因。 - **system_soft_wdt_stop**:停止软件看门狗。此函数停止ESP8266的软件看门狗功能。 - **system_soft_wdt_restart**:重启软件...
##### system_get_rst_info **功能**: 获取重置信息。 **返回值**: 重置信息。 ##### system_soft_wdt_stop **功能**: 停止软看门狗。 ##### system_soft_wdt_restart **功能**: 重启软看门狗。 ##### os_memset ...
在登录系统设计中,通常会涉及以下几个关键模块: 1. 用户界面(UI):这是用户与程序交互的部分。在C#中,我们可以使用Windows Forms或WPF来创建图形用户界面,包括文本框(TextBox)用于输入用户名和密码,按钮...
struct rst_info *rtc_info = system_get_rst_info(); ``` 2. **重启原因解释**:`rtc_info->reason`字段包含了重启的原因码,这些原因码可以帮助开发者快速定位问题所在。例如,如果`rtc_info->reason`的值为`...
这段代码会生成一个名为`system_info.json`的文件,其中包含从`sigar`获取的计算机信息,然后将其与压缩文件`local_computer_info.zip`一起保存。这样,我们就完成了本地计算机信息的获取、整理和压缩打包过程。 总...
订单信息管理系统(order_info_system)是一个基于多种技术栈构建的项目,其中包括MongoDB、Mongoose、Grunt、Node.js、AngularJS、CoffeeScript以及Bootstrap。这个系统旨在提供一个用于管理订单信息的平台,集成了...
Java模块系统(Java Module System,简称JMS),是Java 9及更高版本引入的一个核心特性,旨在解决大型项目中的依赖管理和提升程序的可维护性、安全性和性能。它通过引入模块化概念,使得代码组织更加有序,同时也为...
def get_system_info(): os_name = platform.system() os_version = platform.release() mem_info = psutil.virtual_memory() disk_info = psutil.disk_usage('/') system_info = { 'os_name': os_name, '...
本文档主要介绍了内部邮件模块的数据库表设计,包括 send_mail、receive_mail 和 mail_attachments 三个表格的设计。下面将逐一介绍每个表格的设计细节。 send_mail 表格 send_mail 表格用于存储发邮件的信息,...
一、模块化系统:Java Platform Module System (JPMS) Java9的模块化系统,也称为JPMS,旨在解决Java应用程序的复杂性和依赖性管理问题。它通过定义清晰的模块边界,使得代码组织更加有序,提高了可读性和可维护性。...
STM32单片机读写 ATGM336H(GPS)模块+液晶显示DEMO软件例程源码,可做为你的学习设计参考。 int main(void) { uint32_t lcdid; char cStr[100]; double deg_lat;//转换成[degree].[degree]格式的纬度 double deg_...
新开发的背光模块应放置在`vendor/ardent/merlin/lights`目录下,编译后生成的`lights.default.so`库会放到`/system/lib/hw`目录中。此外,还需要修改`AndroidBoard.mk`文件,引入自定义的`Mdroid.mk`文件,以指示...