2

我使用以下方法在后台启动了一个进程:

erl -s system start -detached

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

我试过:

init:reboot()
4

2 回答 2

11

如果你想杀死系统上所有正在运行的 erlang 进程,如果可能的话,可能以超级用户身份运行它。在 bash 外壳中:

对于我在`ps -ef | grep erl | awk '{打印 $2}'`; 回声 $i; 杀死 -9 $i; 完毕

于 2013-03-18T06:48:03.453 回答
2

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

  1. 您需要知道目标节点的名称。从您的示例节点开始时没有任何名称,您可以通过添加-name -sname如下标志来提供它:erl -sname node_1 -s system start -detached

  2. 启动另一个具有不同名称的节点:erl -sname node_2

  3. 按下^G终端上的(控制 G)node_2

  4. r并输入第一个节点的名称node_1@localhost:(或任何名称)

  5. c

Eshell V5.10.1 (abort with ^G)
(node_2@localhost)1>
User switch command
--> r 'node_1@localhost'
--> c
Eshell V5.10.1 (abort with ^G)
(node_1@localhost)1>

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

于 2013-03-18T12:26:05.210 回答