Nodejs 如何停止node进程?

Nodejs 如何停止node进程?

我用的screen 运行了node app.js 监听3000端口 然后把终端关了,但是此时app.js还在运行 127.0.0.1:3000还能访问 但是我想把app.js重新运行一下,如何操作? 直接再打开终端运行 node app.js 会报错。。。。。

如何查看和结束node后台运行进程?! 求助!!

15 回复

当然可以。针对您的需求,我会为您撰写一个关于如何停止 Node.js 进程的详细解答,包括如何查看正在运行的 Node.js 进程以及如何终止这些进程。

如何停止 Node.js 进程

当您使用 screen 或其他工具启动 Node.js 应用程序并希望停止它时,可以通过以下步骤来完成:

1. 查看正在运行的 Node.js 进程

首先,我们需要确定哪些进程是由 Node.js 启动的。这可以通过检查系统中的所有进程,并查找与 Node.js 相关的进程来实现。以下是几种常见的方法:

方法一:使用 ps 命令

ps aux | grep node

这将列出所有与 Node.js 相关的进程及其PID(进程ID)。

方法二:使用 lsof 命令

lsof -i :3000

此命令会显示监听3000端口的所有进程,如果您的应用正在该端口上运行,则可以找到对应的PID。

2. 终止 Node.js 进程

一旦找到进程ID,就可以通过 kill 命令来终止进程。例如,如果进程ID为1234,您可以使用:

kill 1234

如果您不确定进程是否已经停止,可以再次运行上述 pslsof 命令来确认。

3. 重新运行 Node.js 应用程序

在确保旧进程已终止后,您可以安全地重新启动应用程序:

node app.js

示例

假设您发现进程ID为1234正在运行 app.js,您可以执行以下步骤来停止并重新启动它:

# 查找进程
ps aux | grep node

# 假设输出显示 PID 为 1234
kill 1234

# 检查进程是否已被终止
ps aux | grep node

# 如果需要,重新启动应用
node app.js

通过以上步骤,您可以有效地管理和控制 Node.js 进程,避免因重复运行导致的错误。


linux 下 lsof -i 3000 查找进程ID 难后 kill -9 进程ID

囧 杀不完了。。。 杀了这个进程 node又会自动以其他id继续运行 127.0.0.1:3000还能继续访问。。。 node 自身没有方法可以查看自己运行了哪些进程么?

shutekiMacBook-Pro:~ Mofei$ **lsof -i :3000**

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME Google 185 Mofei 70u IPv4 0x6295535ed3e455cb 0t0 TCP localhost:49951->localhost:hbci (ESTABLISHED) node 2386 Mofei 8u IPv4 0x6295535ee3667b73 0t0 TCP *:hbci (LISTEN) node 2386 Mofei 9u IPv4 0x6295535ed0c0875b 0t0 TCP localhost:hbci->localhost:49951 (ESTABLISHED)

shutekiMacBook-Pro:~ Mofei$ kill -9 2386 shutekiMacBook-Pro:~ Mofei$ lsof -i :3000 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME Google 185 Mofei 70u IPv4 0x6295535ed3e455cb 0t0 TCP localhost:49951->localhost:hbci (CLOSE_WAIT) node 2391 Mofei 8u IPv4 0x6295535ed3e479e3 0t0 TCP *:hbci (LISTEN)

你进程会自动判断是否被关闭,然后再重启?

嗯 看起来是这样的。。。 我kill之后 再lsof -i :3000 还是能看到node的进程。

无限杀。。。

而且之前运行的app.js貌似 一点影响都没有受到。。仍然可以继续访问 127.0.0.1:3000

shutekiMacBook-Pro:~ Mofei$ lsof -i :3000 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME node 2418 Mofei 8u IPv4 0x6295535ee366b5cb 0t0 TCP *:hbci (LISTEN) shutekiMacBook-Pro:~ Mofei$ kill -9 2418 shutekiMacBook-Pro:~ Mofei$ lsof -i :3000 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME node 2433 Mofei 8u IPv4 0x6295535ed0c08023 0t0 TCP *:hbci (LISTEN) shutekiMacBook-Pro:~ Mofei$ kill -9 2433 shutekiMacBook-Pro:~ Mofei$ lsof -i :3000 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME node 2436 Mofei 8u IPv4 0x6295535ed5b33853 0t0 TCP *:hbci (LISTEN)

google 后搞定

可以kill node

pkill node

或者

killall node

如果要杀单独的话就是上面仁兄给的方法 只不过后面不是 kill -9 而是 kill -2 进程id

我的办法:

ps -ef | grep node

其实 Google 真的是很好的老师, 关键字:“screen”

screen -ls 显示所有的 screen 会话

[root[@tivf06](/user/tivf06) ~]# screen -ls
There is a screen on:
        16582.pts-1.tivf06      (Detached)
1 Socket in /tmp/screens/S-root.

重新连接

screen -r 16582

然后就是正常的 linux 命令了。

http://www.ibm.com/developerworks/cn/linux/l-cn-screen/

谢了~ 实际上不是screen的原因 而是因为我吧shell关了,然后node还在运行,再打开shell没法控制之前运行的node了。 不过还是谢了

嗯 同样有效 谢了~

kill -9 为什么不行呢。-9是强制杀死的意思吗、

kill processid后node自己又重启了。如何破?

lsof到底是什么鬼命令?!

竟然被翻尸了,好开森在这里看到大神的问答。 跑偏了… 关于node进程问题,分享下自己的见解,欢迎指正。 场景1:node写数据库操作,如果误操作一次性写入几十万(约数形容很大)条数据到mongodb, 突然发现这是条错误逻辑这时候就是kill掉node进程仍然会继续写入数据库 场景2:对于大批量http请求操作,该操作比较特殊比如处理一些整数或者浮点数,目的是为了造成cpu繁忙的现象,同样的这时kill也不会有用,即使reboot都管用。 分析:对于场景1可以理解为node的高效异步处理能力,在mongodb未写入完上一条数据的时候就又丢给其任务,造成node已经将所有写入任务完成的假象,其实是丢给了mongodb来处理;对于场景2同样的理解方式; 总结:从处理百万级数据的经验得知,nodejs虽然天赋异能能够异步处理任务,但是需要很精准的人为控制,否则就会出现一个进程内存飙到1.7G的悲惨命运。

要停止一个正在运行的 Node.js 进程,可以使用 kill 命令来终止该进程。以下是一些具体的操作步骤:

查找进程ID (PID)

首先,你需要找到运行中的 Node.js 进程的 PID。你可以通过 ps 或者 pgrep 命令来查找:

# 使用 ps 和 grep 查找
ps aux | grep node

# 或者直接使用 pgrep
pgrep -f "node app.js"

上述命令会列出所有包含 node 关键字的进程及其 PID。

结束进程

找到进程 ID 后,你可以使用 kill 命令来终止它。一般来说,使用 -9 选项强制终止进程,但通常建议先尝试不带 -9 的正常终止方式:

# 正常终止
kill <PID>

# 强制终止
kill -9 <PID>

示例

假设 ps aux | grep node 返回了以下输出:

yourusername  1234     0.5  0.2  123456  7890 pts/0    S    12:00   0:01 node app.js

这里 1234 就是进程 ID。

你可以这样终止它:

kill 1234

如果进程没有响应,可以使用 -9

kill -9 1234

重启应用

终止进程后,你可以安全地重启你的 Node.js 应用程序:

node app.js

如果你希望在后台运行并允许你在关闭终端后继续运行,可以考虑使用 nohup 或者像 pm2 这样的进程管理器。

回到顶部