终止节点进程并使用新的 PID 重新启动

终止节点进程并使用新的 PID 重新启动

我有一个节点进程在 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 服务器,它对我来说很有效

  1. 使用命令获取带有端口的进程列表sudo lsof -i -P -n | grep LISTEN
    命令输出(1)

  2. 命中命令systemctl status 15402来获取在该进程 ID 上运行的服务
    命令输出(2)

  3. sudo systemctl stop session-431899.scope停止服务
    命令输出 (3)

现在你的进程已经消失了...!并且端口是空闲的

相关内容