You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React项目在Windows Server上偶发kill ENOSYS崩溃问题排查求助

问题排查:React项目在Windows Server 2019上启动崩溃(Error: kill ENOSYS)

环境与问题现象

  • 运行环境:Windows Server 2019(IIS 10),Node v14.21.3,Yarn 1.22.19
  • 崩溃现象:执行npm start启动项目时偶尔触发崩溃,抛出以下错误:
internal/child_process.js:497
      throw errnoException(err, 'kill');
      ^
Error: kill ENOSYS
    at ChildProcess.kill (internal/child_process.js:497:13)
    at process.<anonymous> (C:\app\insurance_site\node_modules\cross-env\dist\index.js:53:19)
    at process.emit (events.js:400:28) {
  errno: -4054,
  code: 'ENOSYS',
  syscall: 'kill'
}

internal/process/per_thread.js:210
      throw errnoException(err, 'kill');
      ^
Error: kill ENOSYS
    at process.kill (internal/process/per_thread.js:210:13)
    at process.listener (C:\Program Files (x86)\Yarn\lib\cli.js:76410:15)
    at process.emit (events.js:400:28) {
  errno: -4054,
  code: 'ENOSYS',
  syscall: 'kill'
}

项目依赖信息

package.json:

{
  "name": "web-site",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "@kunukn/react-collapse": "^2.2.7",
    "@rehooks/window-scroll-position": "^1.0.1",
    "@types/dotenv": "=6.1.1",
    "@types/express": "=4.17.1",
    "@types/js-base64": "=2.3.1",
    "@types/lodash": "=4.14.149",
    "@types/morgan": "=1.7.37",
    "@types/node": "10.17.17",
    "@types/node-fetch": "=2.5.0",
    "@types/node-sass": "=4.11.0",
    "@types/react": "^16.9.16",
    "@types/react-autosuggest": "^9.3.13",
    "@types/react-dom": "16.8.5",
    "@types/react-fontawesome": "=1.6.1",
    "@types/react-helmet": "=5.0.3",
    "@types/react-input-mask": "^2.0.4",
    "@types/react-redux": "^7.1.5",
    "@types/react-router-config": "=5.0.0",
    "@types/react-router-dom": "^5.1.3",
    "@types/react-select": "=3.0.2",
    "@types/uuid": "^3.4.6",
    "@types/whatwg-fetch": "^0.0.33",
    "app-root-path": "^2.0.1",
    "axios": "^0.21.1",
    "babel-loader": "^8.0.6",
    "babel-plugin-import": "^1.12.1",
    "body-parser": "^1.18.2",
    "bootstrap": "^4.3.1",
    "cross-env": "^5.1.3",
    "crypto": "^1.0.1",
    "customize-cra": "^0.6.0",
    "dotenv": "^8.1.0",
    "dotenv-webpack": "^1.7.0",
    "es6-promise": "^4.2.2",
    "express": "^4.17.1",
    "fetch-everywhere": "^1.0.5",
    "file-loader": "^3.0.1",
    "ignore-loader": "^0.1.2",
    "ignore-styles": "^5.0.1",
    "js-base64": "^2.4.3",
    "less": "^3.9.0",
    "less-loader": "^5.0.0",
    "lodash": "^4.17.4",
    "lodash.throttle": "^4.1.1",
    "morgan": "^1.9.1",
    "node-fetch": "^2.6.0",
    "node-sass": "^4.12.0",
    "nodemon": "^1.19.2",
    "odata-query": "6.0.0-1",
    "rc-steps": "^3.5.0",
    "re-reselect": "^3.4.0",
    "react": "^17.0.2",
    "react-app-rewire-less": "^2.1.3",
    "react-app-rewired": "^2.1.3",
    "react-autosuggest": "^10.0.2",
    "react-bootstrap": "^1.0.0-beta.15",
    "react-countdown": "^2.3.2",
    "react-dom": "^17.0.2",
    "react-dropdown-date": "^2.2.7",
    "react-ga": "^2.6.0",
    "react-helmet": "^5.2.0",
    "react-hook-form": "^3.28.2",
    "react-hotjar": "^2.0.2",
    "react-id-generator": "^3.0.0",
    "react-input-mask": "^2.0.4",
    "react-lines-ellipsis": "^0.14.1",
    "react-modal": "^3.11.1",
    "react-modern-calendar-datepicker": "^3.1.6",
    "react-owl-carousel2": "^0.3.0",
    "react-redux": "7.1.3",
    "react-router-config": "^5.1.1",
    "react-router-dom": "^5.1.2",
    "react-scripts": "3.0.1",
    "react-scripts-ts": "2.13.0",
    "react-select": "=3.0.8",
    "react-spinners": "=0.7.1",
    "redux": "=4.0.4",
    "redux-actions": "=2.6.5",
    "redux-thunk": "=2.3.0",
    "reselect": "=4.0.0",
    "serve-favicon": "=2.4.5",
    "ts-loader": "=6.0.4",
    "ts-node": "=8.3.0",
    "use-media": "=1.4.0",
    "use-react-router": "=1.0.7",
    "uuid": "=3.3.3",
    "webpack-cli": "=3.3.8",
    "webpack-node-externals": "=1.7.2",
    "whatwg-fetch": "=3.0.0"
  },
  "scripts": {
    "prestart": "yarn run build",
    "start": "yarn start:server",
    "start:dev": "yarn run build && yarn start:server:dev",
    "start:server": "cross-env NODE_ENV=production ts-node build_server/server.js",
    "start:server:dev": "cross-env NODE_ENV=development ts-node build_server/server.js",
    "start:client": "react-app-rewired start",
    "build:server": "ts-node node_modules/webpack/bin/webpack.js --config webpack.server.config.js",
    "build:client": "react-app-rewired build",
    "build": "yarn run build:client && yarn run build:server",
    "test": "react-app-rewired test --env=jsdom",
    "eject": "react-app-rewired eject"
  },
  "eslintConfig": {
    "extends": "react-app"
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  },
  "devDependencies": {
    "concurrently": "=3.5.1",
    "style-loader": "=1.0.0",
    "typescript": "3.5.3"
  }
}

排查与解决方法

1. 修复cross-env版本兼容性问题

错误栈明确指向cross-env的进程kill调用,旧版本cross-env@5.1.3与Node.js 14+在Windows环境下存在兼容性问题,新版本已修复此问题:

  • 升级cross-env到最新稳定版:
    yarn add cross-env@latest --save
    

2. 验证Yarn与Node的兼容性

错误同时涉及Yarn的进程信号处理,可尝试:

  • 升级Yarn到最新1.x稳定版;
  • 临时切换为npm执行启动命令,排查是否是Yarn的问题:
    npm run start
    

3. 优化启动脚本(绕过cross-env测试)

临时改用Windows原生环境变量设置方式启动服务,验证是否是cross-env的问题:

# 在Windows cmd中执行
set NODE_ENV=production && ts-node build_server/server.js

如果此方式不崩溃,说明cross-env是核心诱因。

4. 修复服务端进程信号处理逻辑

检查build_server/server.js中是否存在Unix特有的进程信号监听(如SIGTERM),Windows不支持部分Unix信号,需添加兼容处理:

process.on('SIGINT', () => {
  if (process.platform === 'win32') {
    // Windows环境直接退出进程
    process.exit(0);
  } else {
    // Unix环境保留原有逻辑
    process.kill(process.pid, 'SIGINT');
  }
});

5. 清理依赖缓存并重新构建

旧项目依赖可能存在缓存损坏,执行以下步骤重置依赖:

# 清理Yarn缓存
yarn cache clean

# 删除旧依赖与构建产物
rmdir /s node_modules
rmdir /s build
rmdir /s build_server

# 重新安装依赖并构建
yarn install
yarn run build

6. 启用调试模式捕获崩溃细节

添加Node.js调试参数,捕获崩溃时的详细上下文:

  • 修改package.json中的启动脚本:
    "start:server": "cross-env NODE_ENV=production node --inspect-brk ts-node build_server/server.js"
    
  • 打开Chrome浏览器访问chrome://inspect,连接调试进程,捕获崩溃时的调用栈与变量信息。

内容的提问来源于stack exchange,提问作者Hunter91151

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 02:12:08