尝试使用节点server.js运行节点服务器时,我收到侦听EADDRINUSE ::: 4002的错误。 我通过以下命令在端口4002上监听进程:sudo lsof -i:4002。 之后,我尝试使用kill -9终止进程。 问题是当我在终止进程后再次运行sudo lsof -i:4002命令时,我看到节点进程再次以不同的进程ID运行。
节点服务器是由另一个用户启动的,我正试图与另一个用户一起杀死它。
检查它是否由supervisor或pm2控制
@bambam是的,的确是由pm2控制的。 我可以杀死它吗?
pm2列表-> pm2停止
@bambam pm2列表未显示任何内容,可能是因为pm2由另一个用户运行。
您有root特权吗? 如果是这样,请运行sudo pm2 list
@bambam我确实具有root特权。 运行sudo pm2 list也不给我任何东西。
嗯。 这使其变得更难...您可以尝试运行sudo -u pm2 list。 这会返回一些东西吗?
@bambam是的。 2台正在运行的服务器。
凉。 然后您也可以像这样删除进程
@bambam是的,我能够使用:sudo -u pm2全部停止。 谢谢!! 不知道我是否可以将评论标记为答案。
香港专业教育学院添加它作为答案。
节点/ Express的可能重复项:EADDRINUSE,地址已在使用中-终止服务器
'netstat -nptl'查看所有过程
杀死-9 3887(例如,节点在3887 /节点上运行)
该过程似乎会自动重新启动。 这个答案如何解决眼前的问题? -
我可以看到您的上述评论并了解您的问题,因此您希望在启动时删除pm2脚本。 要在启动时自动启动所有nodejs进程,命令为pm2 startup,而与之完全相反的命令为pm2 unstartup,以删除所有nodejs启动过程,这就是我想您要的。
在终端中尝试使用此cmd杀死所有节点进程:
killall node
该过程似乎会自动重新启动。 这个答案如何解决眼前的问题?
这个答案只是帮助您杀死诊断系统以查看是否有启动此过程的后台工作人员的所有节点过程:/
正如我们已经讨论过的那样,该进程是由pm2管理并自动重启的,因此您必须停止pm2进程,而不仅仅是杀死节点进程。 为此,请运行以下命令
sudo -u pm2 list
现在,您将找到给定用户已启动的所有进程。 从此处获取您要停止的进程的ID,然后运行(以停止单个进程)
sudo -u pm2 stop
或者只是阻止他们全部
sudo -u pm2 stop all
Note that sudo -u is only needed because the processes are run by
another user. If you want to stop a process your current user has
created, omit the sudo -u part