二郎:杀死在后台

问题描述:

运行的所有进程,我开始在后台过程中使用:二郎:杀死在后台

erl -s system start -detached 

我需要杀掉该进程。有没有办法杀死所有在后台运行的进程?

我想:

init:reboot() 
+0

OS进程或Erlang进程? – rvirding 2013-03-18 08:01:55

+0

我以为他在谈论OS进程。但有人低估了我的回答,并没有提供任何评论。因为他以分离模式(作为守护进程)启动erlang虚拟机,所以他不可能使用init:stop()。e.t.c来与它交互。那么为什么有人会认为我的答案根本没用?这个问题甚至说'杀死'erlang进程 – 2013-03-19 10:20:11

实现此目的的一种方法是启动另一个erlang控制台,从它附加到第一个,并执行所有必要的事情来正确终止它。

  1. 您需要知道目标节点的名称。在终端上erl -sname node_2

  2. ^G(控制G):erl -sname node_1 -s system start -detached

  3. 开始用不同的名称另一个节点:从你的例子节点没有任何名字开始,您可以通过添加标志-name-sname这样给它与node_2

  4. r与第一节点的类型名称:[email protected](或任何其命名有)

  5. c

Eshell V5.10.1 (abort with ^G)
([email protected])1>
User switch command
--> r '[email protected]'
--> c
Eshell V5.10.1 (abort with ^G)
([email protected])1>

你看到外壳与第一节点的名称新的提示。现在你的所有命令都将在第一个节点上执行。要终止第一个节点,您可以键入erlang:halt().

+0

虚拟机以“分离”模式启动,因此无法访问shell,因此发出这些shell命令是不可能的。也许如果他通过使用'rpc'模块的远程连接节点访问它。 – 2013-03-19 10:21:39

+0

它不依赖于“-tatached”标志。如果分布式模式打开,您可以连接到节点。尝试做我所描述的。 – danechkin 2013-03-19 17:22:53

如果你想杀死你的系统中所有正在运行的Erlang进程,如果可能的话大概运行此超级用户

。在bash shell中:

 
for i in `ps -ef | grep erl | awk '{print $2}'`; do echo $i; kill -9 $i; done 

+0

为什么在投票中呢?我以为他在谈论操作系统的进程,这是我如何看待这个问题。谁投下了这个票,应该给出解释/评论,以便未来的读者得到相应的建议。 – 2013-03-19 10:17:41

+0

对不起,这是我的投票。即使我们正在谈论操作系统进程,使用这样的脚本,您可以轻松地杀死同一台机器上的其他erlang实例。 – danechkin 2013-03-19 17:24:56

+0

我认为这个问题有关键字'all'?可能我的英语有问题,但我认为这个问题是谈论所有过程。 – 2013-03-20 05:02:51