Grunt message: Fatal error: Port 35729 is already in use by another process

Grunt message: Fatal error: Port 35729 is already in use by another process

G运行t 正在工作。但是在将我网站的文件移动到一个目录,位于根目录之后,g运行t 停止工作:

致命错误:端口 35729 已被另一个进程使用。

在这种情况下路径重要吗?查看端口 35729,我发现 G运行t 是该端口上唯一的进程 运行ning。我终止了该进程,确认没有其他进程在 35729 上 运行ning,然后再次 运行 g运行t,但仍然出现与以前相同的致命错误。

虽然我的 none 配置文件在 g运行t 工作后发生了变化,但我想我会尝试使用 "npm init" 方法来创建一个新的 package.json,然后再次 运行 "npm install" 并确认下载 "node_modules"。我还能尝试什么?

我运行宁节点 v0.10.33 Mac OS 10.10.5

问题已解决。虽然 grunt-cli 是全局安装的,但 grunt 是随项目本地安装的。因此,当我将站点的文件向上移动一个目录,并从该新位置 运行 grunt 时,我有效地启动了第二个 grunt 实例,它发现该端口当然已被之前启动的较早的 grunt 实例占用移动文件。

在我终止了那个进程之后,grunt 运行 没有问题。我无法使用 kill -9 杀死它,所以我使用 Mac 的 Activity 监视器发出 "Force Quit"。

问题是 grunt-contrib-watch 的实时重新加载:https://github.com/gruntjs/grunt-contrib-watch/blob/v1.0.0/tasks/lib/livereload.js#L19

您不能有两个 livereload 选项设置为 true 的 g运行t-watch。要么将 livereload 选项之一设置为 false,要么通过将 livereload 选项从 true 设置为 35729 以外的其他值,如 live-reload: 1337 将 liverelaod 的端口更改为其他值。

有关更多信息,请参阅文档:https://github.com/gruntjs/grunt-contrib-watch#optionslivereload

否则,您可以 运行 g运行t 个进程,只要您愿意。

不要在终端中使用 Ctrl+C 停止进程。

Ctrl+Z 将保留它 运行。

通过sudo lsof -i :35729

查找进程id

然后通过sudo kill -9 PID

终止进程

重新运行 grunt watch

就我而言,Grunt watch 已经 运行 在另一个项目中。所以我适当地更新了 Grunt 的监视任务,以便实时重新加载以在不同的端口上监视。

 watch: {
        main: {
            options: {
                livereload: 35730,
                livereloadOnError: false,
                spawn: false
            },
            files: [createFolderGlobs(['*.js', '*.less', '*.html']), '!_SpecRunner.html', '!.grunt'],
            tasks: [] //all the tasks are run dynamically during the watch event handler
        }
    }

指定livereload:PORT

解决方案:

第 1 步

运行 命令行作为管理员。然后 运行 下面提到的命令。在 yourPortNumber:

中输入您的端口号
netstat -ano | findstr : (yourPortNumber)

第 2 步

然后识别PID后执行此命令

taskkill /PID  (typeyourPIDhere) /

享受编码!