如何 停止node进程?
发布于 12 年前 作者 zhuwenlong 101443 次浏览 最后一次编辑是 8 年前

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

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

15 回复

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 ~]# 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是强制杀死的意思吗、

@zhs077 这个kill我还真的不熟悉 不过尝试过了 -2可以 -9虽然杀了 但是node会自己重新开另外一个进程…

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

lsof到底是什么鬼命令?!

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

@zhuwenlong

osx下 sudo lsof -i:80 //列出80端口下的进程 sudo kill -9 xxxx // xxxx指的是进程的PID

回到顶部