运行一个程序我在二郎开发程序杀进程,在二郎山
我运行这个程序使用此命令:
./build.sh && ./deploy.sh ./erl_start.sh
我想知道在功能上做了测试验证这是存储在我的程序文件model.erl
在功能验证我应该找到并杀死我的pr的过程ogram(当前程序) ,我想运行的程序
verify(Val)->
if Val =:=40 ->
%% kill the process of my program
%% run this commande ./build.sh && ./deploy.sh ./erl_start.sh
true -> ok
end.
,所以我认为我将与
verify(Val)->
if Val =:=40 ->
exit(Pid,Reason), %% but I should know the pid of the current program
os_cmd("./build.sh && ./deploy.sh ./erl_start.sh");
true -> ok
end.
尝试了解当前PROGRAMM的PID - >我有一个应用程序,它运行在该应用程序的代码,我应该有办法知道,为了使这个应用程序的PID它停止
目前
我尝试使用此功能:
verify(Val)->
if Val =:=40 ->
Pid = self(),
io:format("~w~n",[Pid]),
spawn(fun() -> exit(Pid, kill) end),
LsOut = os:cmd("./build.sh && ./deploy.sh && ./erl_start.sh");
true -> ok
end.
,当我测试这个功能,我有这样的错误:
1> model:verify(40).
<0.144.0>
** exception exit: killed
我的目标是:
我有一个应用程序在二郎山开发运行该应用程序我需要做的:运行./build.sh & & ./deploy.sh & & ./erl_start.sh
我想打一个函数(在我们的情况下,它是功能验证),将做同样的事情按Ctrl + C和之后都运行./build.sh & & ./deploy.sh & & ./erl_start的.sh meanig停止应用程序并再次运行此应用程序
我也考验你的命令,我有这样的结果:
1> [io:format("~p : ~p~n",[Pid,erlang:process_info(Pid,current_function)]) || Pid <- processes()].
<0.0.0> : {current_function,{init,loop,1}}
<0.3.0> : {current_function,{erl_prim_loader,loop,3}}
<0.5.0> : {current_function,{gen_event,fetch_msg,5}}
<0.6.0> : {current_function,{gen_server,loop,6}}
<0.8.0> : {current_function,{application_master,main_loop,2}}
<0.9.0> : {current_function,{application_master,loop_it,4}}
<0.10.0> : {current_function,{gen_server,loop,6}}
<0.11.0> : {current_function,{gen_server,loop,6}}
<0.12.0> : {current_function,{gen_server,loop,6}}
<0.13.0> : {current_function,{global,loop_the_locker,1}}
<0.14.0> : {current_function,{global,collect_deletions,2}}
<0.15.0> : {current_function,{global,loop_the_registrar,0}}
<0.16.0> : {current_function,{gen_server,loop,6}}
<0.18.0> : {current_function,{gen_server,loop,6}}
<0.19.0> : {current_function,{gen_server,loop,6}}
<0.20.0> : {current_function,{code_server,loop,1}}
<0.21.0> : {current_function,{gen_server,loop,6}}
<0.22.0> : {current_function,{standard_error,server_loop,1}}
<0.23.0> : {current_function,{gen_server,loop,6}}
<0.24.0> : {current_function,{user_drv,server_loop,5}}
<0.25.0> : {current_function,{group,server_loop,3}}
<0.26.0> : {current_function,{group,server_loop,3}}
<0.27.0> : {current_function,{shell,shell_rep,4}}
<0.28.0> : {current_function,{gen_server,loop,6}}
<0.29.0> : {current_function,{gen_server,loop,6}}
<0.36.0> : {current_function,{application_master,main_loop,2}}
<0.37.0> : {current_function,{application_master,loop_it,4}}
<0.38.0> : {current_function,{gen_server,loop,6}}
<0.39.0> : {current_function,{gen_event,fetch_msg,5}}
<0.40.0> : {current_function,{gen_server,loop,6}}
<0.41.0> : {current_function,{gen_server,loop,6}}
<0.44.0> : {current_function,{gen_server,loop,6}}
<0.45.0> : {current_function,{mnesia_locker,loop,1}}
<0.46.0> : {current_function,{gen_server,loop,6}}
<0.47.0> : {current_function,{mnesia_tm,doit_loop,1}}
<0.48.0> : {current_function,{gen_server,loop,6}}
<0.49.0> : {current_function,{gen_server,loop,6}}
<0.53.0> : {current_function,{gen_server,loop,6}}
<0.54.0> : {current_function,{gen_server,loop,6}}
<0.63.0> : {current_function,{disk_log,loop,1}}
<0.65.0> : {current_function,{gen_server,loop,6}}
<0.66.0> : {current_function,{gen_server,loop,6}}
<0.67.0> : {current_function,{gen_server,loop,6}}
<0.68.0> : {current_function,{gen_server,loop,6}}
<0.69.0> : {current_function,{mnesia_late_loader,loop,1}}
<0.105.0> : {current_function,{application_master,main_loop,2}}
<0.106.0> : {current_function,{application_master,loop_it,4}}
<0.107.0> : {current_function,{gen_server,loop,6}}
<0.108.0> : {current_function,{gen_server,loop,6}}
<0.109.0> : {current_function,{gen_server,loop,6}}
<0.110.0> : {current_function,{gen_server,loop,6}}
<0.111.0> : {current_function,{gen_server,loop,6}}
<0.112.0> : {current_function,{gen_server,loop,6}}
<0.113.0> : {current_function,{gen_server,loop,6}}
<0.114.0> : {current_function,{gen_server,loop,6}}
<0.115.0> : {current_function,{gen_server,loop,6}}
<0.117.0> : {current_function,{gen_server,loop,6}}
<0.118.0> : {current_function,{gen_server,loop,6}}
<0.119.0> : {current_function,{gen_server,loop,6}}
<0.120.0> : {current_function,{gen_server,loop,6}}
<0.121.0> : {current_function,{prim_inet,accept0,2}}
<0.123.0> : {current_function,{gen_server,loop,6}}
<0.124.0> : {current_function,{gen_server,loop,6}}
<0.125.0> : {current_function,{gen_server,loop,6}}
<0.126.0> : {current_function,{gen_server,loop,6}}
<0.127.0> : {current_function,{prim_inet,accept0,2}}
<0.129.0> : {current_function,{gen_server,loop,6}}
<0.130.0> : {current_function,{gen_server,loop,6}}
<0.131.0> : {current_function,{gen_server,loop,6}}
<0.132.0> : {current_function,{gen_server,loop,6}}
<0.133.0> : {current_function,{prim_inet,accept0,2}}
<0.135.0> : {current_function,{gen_server,loop,6}}
<0.136.0> : {current_function,{gen_server,loop,6}}
<0.137.0> : {current_function,{gen_server,loop,6}}
<0.138.0> : {current_function,{gen_server,loop,6}}
<0.139.0> : {current_function,{prim_inet,accept0,2}}
<0.140.0> : {current_function,{gen_server,loop,6}}
<0.143.0> : {current_function,{os,start_port_srv_loop,2}}
<0.144.0> : {current_function,{erl_eval,do_apply,5}}
[ok,ok,ok,ok,ok,ok,ok,ok,ok,ok,ok,ok,ok,ok,ok,ok,ok,ok,ok,
ok,ok,ok,ok,ok,ok,ok,ok,ok,ok|...]
,并与第二个命令我:
1> [io:format("~p : ~p~n",[Pid,erlang:process_info(Pid,initial_call)]) || Pid <- processes()].
<0.0.0> : {initial_call,{otp_ring0,start,2}}
<0.3.0> : {initial_call,{erlang,apply,2}}
<0.5.0> : {initial_call,{proc_lib,init_p,5}}
<0.6.0> : {initial_call,{erlang,apply,2}}
<0.8.0> : {initial_call,{proc_lib,init_p,5}}
<0.9.0> : {initial_call,{application_master,start_it,4}}
<0.10.0> : {initial_call,{proc_lib,init_p,5}}
<0.11.0> : {initial_call,{proc_lib,init_p,5}}
<0.12.0> : {initial_call,{proc_lib,init_p,5}}
<0.13.0> : {initial_call,{erlang,apply,2}}
<0.14.0> : {initial_call,{erlang,apply,2}}
<0.15.0> : {initial_call,{erlang,apply,2}}
<0.16.0> : {initial_call,{proc_lib,init_p,5}}
<0.18.0> : {initial_call,{proc_lib,init_p,5}}
<0.19.0> : {initial_call,{proc_lib,init_p,5}}
<0.20.0> : {initial_call,{erlang,apply,2}}
<0.21.0> : {initial_call,{proc_lib,init_p,5}}
<0.22.0> : {initial_call,{standard_error,server,2}}
<0.23.0> : {initial_call,{proc_lib,init_p,5}}
<0.24.0> : {initial_call,{user_drv,server,2}}
<0.25.0> : {initial_call,{group,server,3}}
<0.26.0> : {initial_call,{group,server,3}}
<0.27.0> : {initial_call,{erlang,apply,2}}
<0.28.0> : {initial_call,{proc_lib,init_p,5}}
<0.29.0> : {initial_call,{proc_lib,init_p,5}}
<0.36.0> : {initial_call,{proc_lib,init_p,5}}
<0.37.0> : {initial_call,{application_master,start_it,4}}
<0.38.0> : {initial_call,{proc_lib,init_p,5}}
<0.39.0> : {initial_call,{proc_lib,init_p,5}}
<0.40.0> : {initial_call,{proc_lib,init_p,5}}
<0.41.0> : {initial_call,{proc_lib,init_p,5}}
<0.44.0> : {initial_call,{proc_lib,init_p,5}}
<0.45.0> : {initial_call,{proc_lib,init_p,5}}
<0.46.0> : {initial_call,{proc_lib,init_p,5}}
<0.47.0> : {initial_call,{proc_lib,init_p,5}}
<0.48.0> : {initial_call,{proc_lib,init_p,5}}
<0.49.0> : {initial_call,{proc_lib,init_p,5}}
<0.53.0> : {initial_call,{proc_lib,init_p,5}}
<0.54.0> : {initial_call,{proc_lib,init_p,5}}
<0.63.0> : {initial_call,{proc_lib,init_p,5}}
<0.65.0> : {initial_call,{proc_lib,init_p,5}}
<0.66.0> : {initial_call,{proc_lib,init_p,5}}
<0.67.0> : {initial_call,{proc_lib,init_p,5}}
<0.68.0> : {initial_call,{proc_lib,init_p,5}}
<0.69.0> : {initial_call,{proc_lib,init_p,5}}
<0.105.0> : {initial_call,{proc_lib,init_p,5}}
<0.106.0> : {initial_call,{application_master,start_it,4}}
<0.107.0> : {initial_call,{proc_lib,init_p,5}}
<0.108.0> : {initial_call,{proc_lib,init_p,5}}
<0.109.0> : {initial_call,{proc_lib,init_p,5}}
<0.110.0> : {initial_call,{proc_lib,init_p,5}}
<0.111.0> : {initial_call,{proc_lib,init_p,5}}
<0.112.0> : {initial_call,{proc_lib,init_p,5}}
<0.113.0> : {initial_call,{proc_lib,init_p,5}}
<0.114.0> : {initial_call,{proc_lib,init_p,5}}
<0.115.0> : {initial_call,{proc_lib,init_p,5}}
<0.117.0> : {initial_call,{proc_lib,init_p,5}}
<0.118.0> : {initial_call,{proc_lib,init_p,5}}
<0.119.0> : {initial_call,{proc_lib,init_p,5}}
<0.120.0> : {initial_call,{proc_lib,init_p,5}}
<0.121.0> : {initial_call,{proc_lib,init_p,5}}
<0.123.0> : {initial_call,{proc_lib,init_p,5}}
<0.124.0> : {initial_call,{proc_lib,init_p,5}}
<0.125.0> : {initial_call,{proc_lib,init_p,5}}
<0.126.0> : {initial_call,{proc_lib,init_p,5}}
<0.127.0> : {initial_call,{proc_lib,init_p,5}}
<0.129.0> : {initial_call,{proc_lib,init_p,5}}
<0.130.0> : {initial_call,{proc_lib,init_p,5}}
<0.131.0> : {initial_call,{proc_lib,init_p,5}}
<0.132.0> : {initial_call,{proc_lib,init_p,5}}
<0.133.0> : {initial_call,{proc_lib,init_p,5}}
<0.135.0> : {initial_call,{proc_lib,init_p,5}}
<0.136.0> : {initial_call,{proc_lib,init_p,5}}
<0.137.0> : {initial_call,{proc_lib,init_p,5}}
<0.138.0> : {initial_call,{proc_lib,init_p,5}}
<0.139.0> : {initial_call,{proc_lib,init_p,5}}
<0.140.0> : {initial_call,{proc_lib,init_p,5}}
<0.143.0> : {initial_call,{erlang,apply,2}}
<0.144.0> : {initial_call,{erlang,apply,2}}
[ok,ok,ok,ok,ok,ok,ok,ok,ok,ok,ok,ok,ok,ok,ok,ok,ok,ok,ok,
ok,ok,ok,ok,ok,ok,ok,ok,ok,ok|...]
但是我怎么才能知道程序的pid, – 2013-02-22 16:58:24
使用:[erlang:self/0](http://erlang.org/doc/man/erlang.html#self-0),然后程序会自行终止并且[os:cmd/1](http://www.erlang.org/doc/man/os.html#cmd-1)永远不会运行? – emil 2013-02-24 16:56:33
你可以产生另一个过程,它为你做 – Vinod 2013-02-24 18:13:43