无法找到Node.js应用程序在哪里运行,也无法杀死它



我做了什么:我刚刚设置了节点环境,安装了express,创建并安装了一个express项目

express hello
cd hello && npm install

然后用"node app"启动应用程序。

环境:

yole@Yole:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 7.2 (wheezy)
Release:    7.2
Codename:   wheezy
yole@Yole:~$ node --version
v0.10.22
yole@Yole:~$ express --version
3.4.4

问题当我想停止这个应用程序时,我使用了CTRL+C,,但我发现它没有停止。然后我重新启动了服务器!我发现我仍然可以在浏览器中访问该页面。奥。

我试过以下事情,但仍然找不到运行过程。

yole@Yole:~$ killall node
node: no process found
yole@Yole:~$ ps -ef|grep node
yole      3161  2888  0 16:57 pts/1    00:00:00 grep node
yole@Yole:~$ netstat -apn|grep 3000

问题如何找出正在运行的节点进程或如何杀死它。

=====更新非常奇怪的是,在我的机器上所有的浏览都可以访问该网站,而在其他机器上却不可用!在停止应用程序之前,我只使用Chrome访问页面。这似乎是一个缓存问题,但浏览器之间如何共享缓存。。

列表节点进程:

$ ps -e|grep node

使用终止进程

$kill -9 XXXX

这里XXXX是进程号

如果你想知道nodejs进程是如何运行的,那么你可以使用这个命令

ps -aef | grep node

因此,它将给出nodejs进程的列表及其项目名称。当您运行multipe nodejs应用程序&您想要为特定的项目终止特定的进程。

以上命令将给出类似的输出

XXX  12886  1741  1 12:36 ?        00:00:05 /home/username/.nvm/versions/node/v9.2.0/bin/node --inspect-brk=43443 /node application running path.

所以要杀死你可以使用以下命令

kill -9 12886

因此,它将杀死spefic节点进程

您可以使用pkill node 杀死所有节点进程

或者您可以执行ps T以查看此终端上的所有进程
然后您可以通过执行kill [processID]来终止特定进程ID,例如:kill 24491

此外,您可以执行ps -help以查看所有可用选项

从macOS了解这一点-使用以下3个命令进行调查通常会有所帮助:

将6006替换为应用程序URL的一个有意义的端口,在我的情况下,我正在寻找localhost:606,它不是一个正在运行的应用程序,但在浏览器中点击URL时仍然可用。

Netstat

netstat -anp tcp | grep 6006

这将报告连接的类型和运行它的命令,从这里你可以调查TCP状态:

tcp4       0      0  127.0.0.1.58473        127.0.0.1.6006         CLOSE_WAIT
tcp4       0      0  127.0.0.1.6006         127.0.0.1.58471        FIN_WAIT_2
tcp4       0      0  127.0.0.1.58471        127.0.0.1.6006         CLOSE_WAIT
tcp4       0      0  127.0.0.1.6006         *.*                    LISTEN
tcp4       0      0  127.0.0.1.58468        127.0.0.1.6006         TIME_WAIT

lsof

lsof -i tcp:6006

这将列出命令名称和PID。

在此之后,您可以选择使用kill和PID编号来停止进程的运行。例如:kill #####

COMMAND     PID       USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
node       8193 username   26u  IPv4 0x8793aae78e568e01      0t0  TCP localhost:6006 (LISTEN)
Google    93430 username   67u  IPv4 0x8793aae79530c941      0t0  TCP localhost:58471->localhost:6006 (CLOSE_WAIT)
Google    93430 username   68u  IPv4 0x8793aae795d98ba1      0t0  TCP localhost:58473->localhost:6006 (CLOSE_WAIT)

最后,为了找到node进程运行的位置,您可以使用ps,在这里,而不是像其他人提到的那样使用node,请使用您要查找的端口号本身:

ps

ps -aef | grep 6006

这将报告如下:

  501  8193  8179   0 24May21 ttys008    1:08.98 /Users/username/.nvm/versions/node/v12.10.0/bin/node /Users/username/Documents/repositories/react-application/node_modules/.bin/start-storybook -h localhost -p 6006
  501 77757  9725   0 12:50PM ttys013    0:00.00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn --exclude-dir=.idea --exclude-dir=.tox 6006

现在,我们可以确认lsof命令中的PID与ps打印的PID匹配,我们可以看到进程是何时启动的,我们看到了持久应用程序的路径。

最后,我们可以使用kill ####来停止该过程。

我使用fkill

安装

npm i fkill-cli -g

示例

命令行中的搜索过程

fkill

或者:杀死!所有过程

fkill node

OR:使用端口8080终止进程

fkill :8080

如果所有这些kill进程命令都不适用于您,我的建议是检查您是否使用任何其他包来运行节点进程。

我也遇到了类似的问题,这是因为我使用PM2(一个NPM包)运行节点进程。kill [processID]命令禁用进程,但保持端口被占用。因此,我不得不进入PM2并转储所有节点进程,以再次释放端口。

相关内容

最新更新