我使用以下方法在后台启动了一个进程:
erl -s system start -detached
我需要终止进程。有没有办法杀死所有在后台运行的进程?
我试过:
init:reboot()
如果你想杀死系统上所有正在运行的 erlang 进程,如果可能的话,可能以超级用户身份运行它。在 bash 外壳中:
对于我在`ps -ef | grep erl | awk '{打印 $2}'`; 回声 $i; 杀死 -9 $i; 完毕
实现此目的的一种方法是启动另一个 erlang 控制台,将其附加到第一个控制台并执行所有必要的操作以正确终止它。
您需要知道目标节点的名称。从您的示例节点开始时没有任何名称,您可以通过添加-name
-sname
如下标志来提供它:erl -sname node_1 -s system start -detached
启动另一个具有不同名称的节点:erl -sname node_2
按下^G
终端上的(控制 G)node_2
按r
并输入第一个节点的名称node_1@localhost
:(或任何名称)
按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().