我有一個erlang進程,應該在產生後立即執行某些操作,然後在完成時將結果發送回父進程。我如何找出產生它的過程的PID?如何確定進程的父進程的PID
12
A
回答
14
您應該將self()傳遞給子項作爲輸入函數的參數之一。
spawn_link(?MODULE, child, [self()]).
0
您可以使用BIF寄存器爲產卵/父進程指定一個名稱(原子),然後引用其他進程的註冊名稱。
FUNC() - >
%%做一些
%%然後將消息發送到父
父!信息。...
寄存器(父,自()),
產卵(MODULE,FUNC,[參數])。
請參閱Getting Started With Erlang §3.3和The Erlang Reference Manual §10.3。
+0
雖然你可以通過註冊一個名字來完成,但它並不是一個好主意。如果您積極勸阻並解釋問題,這篇文章會更好。 – Christian 2009-08-13 11:35:43
4
@Eridius的答案是這樣做的首選方法。要求註冊名稱的過程可能會產生意想不到的副作用,例如增加流程的可見性,更不用說當您擁有大量流程時提供獨特名稱的麻煩。
3
最好的方法是將它作爲參數傳遞給被調用的函數以啓動子進程。如果您正在產卵的玩意兒,這通常是一個很好的事情,要小心這樣做的:
spawn_link(fun() -> child(self()) end)
如你預期它不會做。 (提示:什麼時候自己()被調用)
一般來說,你應該避免註冊一個進程,即給它一個全局名稱,除非你真的希望全局知道它。產生趣味意味着你不必導出衍生函數,因爲通常應該避免導出不意味着從其他模塊調用的函數。
相關問題
- 1. Win32進程如何獲取父進程的PID?
- 2. 父進程如何找到導致其子進程死亡的進程的PID?
- 3. 確定終止進程的PID
- 4. 如何在perl中的父進程中獲取死亡的子進程的PID?
- 5. 爲什麼子進程和父進程的pid相同?
- 6. 是否將子進程pid()分配給父進程?
- 7. 啓動過程後,如何讓父母的PID進入孩子?
- 8. 如何讓父進程顯示PID的子代替值變量?
- 9. 如何使用子進程check_output獲取子進程的PID
- 10. grepping進程的PID - Unix的
- 11. 如何確定當前運行的進程是否爲父進程?
- 12. 如何獲取子進程的PID?
- 13. 如何獲得一個進程的PID?
- 14. 如何找到孤兒進程的pid
- 15. 如何獲得gjs中的進程pid?
- 16. 如何獲得PyWin32進程的PID
- 17. 進程的父ID不同於PID的父
- 18. 如何從子進程定義具有相同進程ID的父進程
- 19. 如何看父進程和子進程
- 20. linux - 獲取進程的pid
- 21. 獲得子進程的PID
- 22. PHP:獲取特定進程的PID
- 23. 進程外COM對象能否確定其父進程?
- 24. 從C#確定父進程ID
- 25. 如何從父perl守護進程獲取pid?
- 26. 如何確定是否在用戶界面進程的進程?
- 27. 確定在某個端口上偵聽的進程pid
- 28. 如何殺死一個PID在PID文件中的進程?
- 29. 如何確定進程ID(PID)是32位還是64位應用程序?
- 30. 子進程/父進程
對於使用`proc_lib`的OTP和其他進程,請參見[如何找到OTP進程的管理器?](http://stackoverflow.com/questions/4132317/how-to-find-the-supervisor-of -an-otp-process) – 2011-05-19 11:30:16