Есть ли способ убить erlang vm, когда он работает с -heart?

Название в значительной степени подводит итог. У меня есть зотонический сайт, работающий с -heart, он использует много процессорного времени, и я не могу получить оболочку erlang. Так есть ли способ убить виртуальную машину? killall heart а также killall beam.smp не работают.

Я нашел этот вопрос: Остановите Erlang Daemon, но он на самом деле не отвечает на мой вопрос.

3 ответа

Просто используйте:

init:stop().

Это убьет сердечный процесс и все приложения.

У меня была такая же проблема.... И это было действительно трудно убить. Я пробовал нормальные пути и не мог этого сделать. Итак, я сделал это взломать:

Сначала давайте получим PID

sudo netstat -tulpn |grep 8080
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      931/beam.smp    

Таким образом, PID 931.

Затем, какая программа создала этот процесс?

lsof -p 931 | grep txt
lsof: WARNING: can't stat() fuse.gvfs-fuse-daemon file system /home/agarcia/.gvfs
      Output information may be incomplete.
beam.smp 931 yaws  txt    REG     8,1  2053256 22793377 /usr/lib/erlang/erts-5.8.5/bin/beam.smp

Итак, программа.../bin/beam.smp, ​​поэтому просто переместите ее

mv beam.smp old_beam.smp 

И теперь ты убиваешь это

kill -9 931

И я наконец смог убить его:-)

Это свидетельство надежности эрланга, которую на самом деле нужно взломать, чтобы иметь возможность отключить сервис.

ps: я изначально пробовал yaws -I [pid] --stop, но это тоже не сработало.

Если вы не против убить каждую виртуальную машину на вашей машине:

ps aux | grep -e heart -e epmd | grep -v grep | tr -s ' ' | cut -d ' ' -f 2 | xargs kill -9

ВМ и heart Похоже, что они следят друг за другом. В случае, если виртуальная машина находится в цикле сбоя / восстановления, вам может потребоваться выполнить эту команду несколько раз быстро, чтобы уничтожить все мертвые.

Другие вопросы по тегам