2010-03-29 4 views
6

Mam aplikację Erlang działającą jako demon, skonfigurowany jako serwer SSH. Mogę połączyć się z nim z klientem SSH i otrzymuję standardową wersję REPL Erlang.Wylogowanie się z sesji SSH w maszynie Erlang VM bez zatrzymywania maszyny wirtualnej lub porzucania starych procesów.

Jeśli "q()". Zamknąłem maszynę wirtualną Erlang, a nie połączenie. Jeśli zamknę połączenie ("~." Dla OpenSSH, zamknę okno w PuTTY) niektóre procesy pozostaną w drzewie sshd_sup/ssh_system_xx_sup. Wygląda na to, że są to procesy nieaktualnych powłok.

Nie widzę żadnej wyeksportowanej funkcji w module powłoki, która pozwoliłaby mi zamknąć powłokę (a zatem połączenie SSH) bez wpływu na całą maszynę wirtualną.

Jak wylogować się z sesji SSH, aby nie pozostawić nieaktualnych procesów w maszynie wirtualnej?

Odpowiedz

4

"exit()." w kliencie SSH zamyka połączenie bez zatrzymywania maszyny wirtualnej.

Nie mogłem znaleźć tego dokumentu nigdzie, ale wydaje mi się, że robię prawie to, co chcę.

Zamiast pozostawiać 4 nieaktualne procesy w zakończonym połączeniu, np. Zabicie klienta, "exit()." pozostawia 2 nieaktualne procesy.

Może to być teraz w obszarze modułu "ssh", a nie w obszarze modułu "powłoki".

+0

Nie pozostawia żadnych przeterminowanych procesów dla mnie (R15B01) z zachowaniem '~ .' i' exit() ': ' 4> erlang: system_info (process_count). 43' '% connect by shh 5> erlang: system_info (process_count). 53' '% zakończyć sesję przez" ~. " lub "exit()"> erlang: system_info (process_count). 43' – seriyPS