我在嘗試瞭解這裏發生了什麼:主管在重新啓動孩子時是否阻止呼叫?
我有一位主管在不觸發MaxR, MaxT
機制的情況下循環重新啓動一個客戶端。客戶端崩潰足夠慢,從不觸發速率限制。
有會一直使用supervisor:which_children/1
和delete_child/2, start_child/2
相適應的一套兒童的現實另一個機制(其爲USB設備掃描試圖讓每發現一個設備監孩子)。
這通常會像限制安全網一樣,但奇怪的是,它看起來像刪除和啓動兒童的機制根本沒有被調用。
要了解發生了什麼,我從shell中調用了supervisor:which_children/1
,它看起來像調用只是阻止並且從不返回。
是否可以在主管嘗試重新啓動孩子時阻止對主管的呼叫?
附錄:
它看起來像崩潰孩子開始時發生的情況:
=SUPERVISOR REPORT==== 29-Mar-2011::21:36:20 ===
Supervisor: {local,gateway_sup}
Context: start_error
Reason: {'EXIT',{timeout,{gen_server,call,[<0.155.0>,late_init]}}}
Offender: [{pid,<0.76.0>},
{name,gw_3_5},
{mfa,{channel,start_link,
[[{gateways,[{left,108},{right,103}]}],
{3,5}]}},
{restart_type,transient},
{shutdown,10000},
{child_type,worker}]
你在孩子的'start_link'函數中做了'gen_server:call'嗎? – 2011-03-30 11:24:36
是的,我願意。我需要在gen_server已經運行之後進行一些遲的初始化。 – 2011-03-30 11:37:22
爲什麼不在'init'函數中執行此操作?似乎這裏可能存在死鎖的風險...... – 2011-03-30 11:51:44