OTP sürecinin denetçisinin pidini bulmasını sağlayacak fonksiyonlar var mı?Bir OTP sürecinin denetçisi nasıl bulunur?
cevap
veri girişi '$ancestors'
altında (herhangi bir işlem proc_lib
ile kökenli ait) işlem sözlükte gizlidir: Burada
1> proc_lib:spawn(fun() -> timer:sleep(infinity) end).
<0.33.0>
2> i(0,33,0).
[{current_function,{timer,sleep,1}},
{initial_call,{proc_lib,init_p,3}},
{status,waiting},
{message_queue_len,0},
{messages,[]},
{links,[]},
{dictionary,[{'$ancestors',[<0.31.0>]},
{'$initial_call',{erl_eval,'-expr/5-fun-1-',0}}]},
{trap_exit,false},
{error_handler,error_handler},
{priority,normal},
{group_leader,<0.24.0>},
{total_heap_size,233},
{heap_size,233},
{stack_size,6},
{reductions,62},
{garbage_collection,[{min_bin_vheap_size,46368},
{min_heap_size,233},
{fullsweep_after,65535},
{minor_gcs,0}]},
{suspending,[]}]
bize {dictionary,[{'$ancestors',[<0.31.0>]},
olduğunu ilgilendiren hat
Bu, kendinizi nadiren kullanmanız için bir nedene sahip olmanız gereken türden bir şey olduğunu unutmayın. Bildiğim kadarıyla, daha önce sahip olduğunuz herhangi bir kod için iç gözlemden ziyade denetim ağaçlarındaki temiz sonlandırmayı işlemek için kullanılır. Dikkatli tutun.
OTP'nin mantıklı içgüdüleriyle uğraşmadan işleri yapmanın daha temiz bir yolu, 'un denetleyicinin, kendi pid'ını, başlatılırken işlemin bir argümanı olarak geçirmesini sağlamaktır. Bu, kodunuzu okuyan insanlar için çok daha az kafa karıştırıcı olmalıdır. Yanlış yapmak istiyorsanız
Evet, bu iyi bir fikir gibi görünüyor. –
Ben de amiri pid geçişi ile giderdim. Uygulanması ve sürdürülmesi daha basittir. –
, burada çözüm:
%% @spec get_ancestors(proc()) -> [proc()]
%% @doc Find the supervisor for a process by introspection of proc_lib
%% $ancestors (WARNING: relies on an implementation detail of OTP).
get_ancestors(Pid) when is_pid(Pid) ->
case erlang:process_info(Pid, dictionary) of
{dictionary, D} ->
ancestors_from_dict(D);
_ ->
[]
end;
get_ancestors(undefined) ->
[];
get_ancestors(Name) when is_atom(Name) ->
get_ancestors(whereis(Name)).
ancestors_from_dict([]) ->
[];
ancestors_from_dict([{'$ancestors', Ancestors} | _Rest]) ->
Ancestors;
ancestors_from_dict([_Head | Rest]) ->
ancestors_from_dict(Rest).
- 1. Django otp nasıl uygulanır?
- 2. Erlang/OTP
- 3. Delphi Nesne Denetçisi nasıl güncellenir?
- 4. VBScript: Çalışma sürecinin tam yolunu nasıl alabilirim?
- 5. erlang OTP Süpervizör çöküyor
- 6. PHP'de Temel64 Otp Kitaplığı
- 7. Özel Nesne Denetçisi Bileşenleri?
- 8. .data() kodu Krom denetçisi
- 9. Medya Denetçisi videonun üzerine nasıl ayarlanır?
- 10. Sinch (OTP doğrulama) etkinliği kilitleniyor
- 11. Bir dizedte DATE nasıl bulunur
- 12. NSArray'da bir dize nasıl bulunur?
- 13. Bir arraylist dizini nasıl bulunur?) (
- 14. XCode 4.2 Sürüm Denetçisi Storyboard'u Gizler
- 15. "Bitmeyen" bir görev tekrarı için hangi OTP davranışını kullanmalıyım?
- 16. Ülkeler listesi nasıl bulunur?
- 17. Kök UIViewController nasıl bulunur
- 18. İçeriğin kesildiği nasıl bulunur?
- 19. Maksimum Tarih Nasıl Bulunur
- 20. nasıl bulunur gün
- 21. .NET web tabanlı nesne tarayıcısı/denetçisi
- 22. Firefox denetçisi - CSS kuralları önerileri/ipuçları
- 23. Özel Pencere Üzerinde Birlik Özel Denetçisi
- 24. Chrome v50 ağ denetçisi gerçekten yavaşlatıyor
- 25. iOS sürümü nasıl bulunur?
- 26. Kimlik Denetçisi başlığı altında Xcode 4
- 27. Düğüm denetçisi kullanarak babelJS nakledilen kodda nasıl hata ayıklanır?
- 28. web öğesi denetçisi (safari/krom) CSS özellikleri
- 29. Yayınlanmış özelliklerimi, belirtilen nesne denetçisi kategorisine nasıl yerleştiririm?
- 30. Derlenmiş bir çekirdek modülünün sürümü nasıl bulunur?
Fikrim yok, ama sen bağlantılı süreçleri alabilirsiniz ve afaik amiri bunlardan biridir. – ZeissS