2010年5月11日星期二

erlang学习笔记 跨系统erlang查询脚本

1.利用 os:cmd 执行命令进行查询
2.利用 os:type 检查os版本, 对于不同操作系统的不同做不不同的处理
3 os:getpid, 获得自身的进程号

-module(fd).
-export([start/0]).

get_total_fd_ulimit() ->
{MaxFds, _} = string:to_integer(os:cmd("ulimit -n")),
MaxFds.

get_total_fd() -> get_total_fd(os:type()).

get_total_fd({unix, Os})
when Os =:= linux orelse
Os =:= darwin orelse
Os =:= freebsd orelse Os =:= sunos ->
get_total_fd_ulimit();
get_total_fd(_) -> unknown.

get_used_fd_lsof() ->
Lsof = os:cmd("lsof -d \"0-9999999\" -lna -p " ++
os:getpid()),
string:words(Lsof, $\n).

get_used_fd() -> get_used_fd(os:type()).

get_used_fd({unix, Os})
when Os =:= linux orelse
Os =:= darwin orelse Os =:= freebsd ->
get_used_fd_lsof();
get_used_fd(_) -> unknown.

start()->
io:format("total fd: ~p~n"
"used fd: ~p~n", [get_total_fd(), get_used_fd()]),
halt(0).

没有评论: