我有一个节点进程在 ubuntu 机器上运行
当我做
ps -ef | grep node
那么我在列表中找不到进程 ID。我还有一些其他节点进程正在运行。
然后我就这么做了
sudo netstat -lpn |grep :'3019'
//3019是node运行的端口
输出 -tcp6 0 0 :::3019 :::* LISTEN 15526/app.js
sudo kill -9 15526
但它不起作用。它现在正在使用新的 PID 运行。
非常感谢您的帮助。
答案1
这种情况通常发生在当一个进程有一个父进程时,如果子进程死亡(被杀死),则父进程负责产生一个新的子进程。
使用以下方法查看进程树:
ps auxf
您将看到父/子进程关系的图形表示:
ripper 1699 0.3 0.4 415992 48220 ? Ssl 22:20 0:12 \_ /usr/lib/gnome-terminal/gnome-terminal-server
ripper 1704 0.0 0.0 7908 4632 pts/0 Ss 22:20 0:00 | \_ bash
root 2454 0.0 0.0 10244 4020 pts/0 S 22:21 0:00 | | \_ sudo -i
root 2455 0.0 0.0 7916 4696 pts/0 S 22:21 0:00 | | \_ -bash
root 3195 1.5 0.0 8684 4408 pts/0 S+ 22:22 0:51 | | \_ htop
先杀死父进程,再杀死子进程(如果子进程没有自行退出)
另一个问题可能是 cron 或其他调度程序正在启动您终止的进程 - 这需要深入研究 crontab 表以及系统上正在运行的其他程序......
答案2
通常,此类进程由服务管理器(例如 systemd)启动和监督,并且通常将服务管理器配置为在服务崩溃时重新启动该服务。
您的kill -9
操作被解释为服务崩溃 – 如果您确实想停止它,您必须礼貌地询问服务经理。
检查该进程是否由 systemd 管理,并使用以下命令找出其服务名称:
systemctl status <pid>
如果已管理,请使用以下命令停止该服务:
systemctl stop <service>
答案3
我正在使用 ubuntu 服务器,它对我来说很有效
使用命令获取带有端口的进程列表
sudo lsof -i -P -n | grep LISTEN
命中命令
systemctl status 15402
来获取在该进程 ID 上运行的服务
sudo systemctl stop session-431899.scope
停止服务
现在你的进程已经消失了...!并且端口是空闲的