2016-07-18 41 views
1

在我的應用程序中,我計劃有很多工作進程,可能會花費數小時來完成工作。退出kill/2進程是否是一種常見的做法?

我想讓用戶能夠停止刪除工人。

kill/2, exit這個過程是否可以接受? 即使它正在進行一些工作(即下載文件),它是否會終止進程?

主管提供了一個類似的機制來阻止和移除正在做一些工作的孩子嗎?

+0

您是否檢查過[主管文檔](http://erlang.org/doc/man/supervisor.html)? –

+0

@SteveVinoski是的,我主要關心的是無條件終止。看來這是如此,正如我在下面發現的。謝謝! – drozzy

回答

1

可以接受殺,exit/2的過程嗎?即使它正在做一些工作(即 下載文件),它是否會終止 進程?

是的。正如你所說,爲了終止一個過程,你可以使用exit/2。如果您將Reason參數設置爲:noraml,OtherReasonkill,則終止步驟將有所不同。 在Error Handling文檔中有詳細說明,更詳細的說明請參閱this
所以你可以選擇任何適合你的應用程序。

做主管提供了一個類似的機制來阻止和刪除 正在做一些工作的孩子嗎?

是的。正如評論中提到的,在Erlang's Supervisor文檔中有一個非常好的詳細文檔。我建議你仔細閱讀這一切,但你正在尋找的主要部分是:

  1. 定義啓動子(主要是shutdownrestart選項)當child_spec()
  2. terminate_child/2實際終止子女。
  3. delete_child/2用於在致電terminate_child/2後刪除小孩。

您可以閱讀更多關於它here

+1

謝謝,這部分正是我在找的東西:「當一個進程接收到一個非正常退出原因的退出信號時的默認行爲是終止...當進程陷入退出時,它不會終止一個退出信號被接收,而信號被轉換成一個消息{'EXIT',FromPid,Reason},它被放入進程的郵箱中,就像一個普通的消息一樣。「 – drozzy

相關問題