Есть ли способ убить 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
Похоже, что они следят друг за другом. В случае, если виртуальная машина находится в цикле сбоя / восстановления, вам может потребоваться выполнить эту команду несколько раз быстро, чтобы уничтожить все мертвые.