Nodejs 如何停止node进程?
Nodejs 如何停止node进程?
我用的screen 运行了node app.js 监听3000端口 然后把终端关了,但是此时app.js还在运行 127.0.0.1:3000还能访问 但是我想把app.js重新运行一下,如何操作? 直接再打开终端运行 node app.js 会报错。。。。。
如何查看和结束node后台运行进程?! 求助!!
当然可以。针对您的需求,我会为您撰写一个关于如何停止 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
如果您不确定进程是否已经停止,可以再次运行上述 ps
或 lsof
命令来确认。
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 命令了。
谢了~ 实际上不是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
这样的进程管理器。