标题几乎概括了它。我有一个使用 -heart 运行的 zotonic 站点,它使用大量 cpu 时间,而且我无法获得 erlang shell。那么,有没有办法杀死虚拟机?killall heart
并且killall beam.smp
不工作。
我发现了这个问题: Stop Erlang Daemon ,但它并没有真正回答我的问题。
标题几乎概括了它。我有一个使用 -heart 运行的 zotonic 站点,它使用大量 cpu 时间,而且我无法获得 erlang shell。那么,有没有办法杀死虚拟机?killall heart
并且killall beam.smp
不工作。
我发现了这个问题: Stop Erlang Daemon ,但它并没有真正回答我的问题。
只需使用:
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
我终于能够杀死它:-)
这证明了 erlangs 的可靠性,一个人实际上需要破解它才能取消服务。
ps:我最初尝试了 yaws -I [pid] --stop 但它也不起作用。
如果您不介意杀死机器上的所有虚拟机:
ps aux | grep -e heart -e epmd | grep -v grep | tr -s ' ' | cut -d ' ' -f 2 | xargs kill -9
VM 和heart
似乎相互监视对方。如果虚拟机处于崩溃/恢复循环中,您可能需要快速运行此命令几次以杀死所有死机。