2013-03-17 131 views
2

運行的所有進程,我開始在後臺過程中使用:二郎:殺死在後臺

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

回答

1

實現此目的的一種方法是啓動另一個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

6
如果你想殺死你的系統中所有正在運行的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