解决PM2在Windows系统下不能正常启动的问题

阅读时长 12 分钟读完

在使用Node.js开发Web应用时,PM2是一个非常好用的进程管理工具。但是,在Windows系统下使用PM2可能会出现无法正常启动的问题,本文将介绍如何解决这个问题。

问题描述

在Windows系统下运行pm2 start app.js命令时,可能会出现以下错误信息:

-- -------------------- ---- -------
------------ -------- --- ------ ---- -------------------------------
----- -------- --- ------
----- --- ------------ ----------
----- -------- ------ -- --------- -- ---------
----- -----
----- -----------------
----- ------- --- ------- ------ ------
------------ --- ----- ---- - ---
------------ --- ----- ------ - ----
------------ --- ----- ------ - --
------------ --- ----- ------ - --
------------ --- ---- -------- ---------- -------- ----- ----------
----- --- ----- ---- -- --- --- --- -------------- ------ ---- ---- ----- --- ------ ------
----- -------- --------- -------- -- ----- ----- --- --- -------- ----
----- --- -------- ---- ------

解决方法

出现这个问题的原因是Windows系统下的进程ID取值范围与Linux系统不同,在Windows系统中,进程ID的最大值为2147483647,而PM2使用-1表示无效的进程ID,因此在Windows系统中,PM2启动的进程ID可能是-2147483648,这个值超出了Windows系统的进程ID取值范围,导致程序启动失败。

解决这个问题的方法是修改PM2的代码,将使用-1表示无效的进程ID的方式改为使用0,即将lib/God/ForkMode.js文件中的:

改为:

修改完成后,重新启动PM2即可正常启动应用。

示例代码

以下是修改后的ForkMode.js文件完整代码:

-- -------------------- ---- -------
--- ---     - ------------------------------
--- -----   - ----------------------------
--- ----    - ----------------
--- --      - --------------
--- ---------- - -----------------------------------

---
 - ---------
 --
--- ------------------            - -----------------------
----- ----------------------        - ---------------------------

-------------- - -------- ------------- -
  --- --- - --

  ---
   - ---- ----
   --
  ------------ - -
    ---
     - -----------
     - ------- -----------
     - ------ -- --------
     - ------ -- --
     - ------- 
     --
    ------------ ------------------ --- -
      --- --- - ---------------- -------------

      -------------------------------- ----- ----------

      ------------------------------------------- -
        -------- - --------------
      ---

      -- -- --- ----- ------- --- ---
      --------- - --------- -- ----
      ----------- - ----------- -- ----
      --- ------- - ------------- -- ----------- - ------ - ----------

      -- ------- ------ ---- -- -------
      --- ------ - -----------------

      ---
       - ---- ------------ -- ------- ------
       - -------- -- --- ------- ------
       - ---------- -- ---------- ---- ------- --- -- ----- ---------
       --
      ------------------        - ------------------
      -----------------         - ----------
      ----------------          - ---------
      ------------------------  - -----------------
      ------------------------------------------------
      ------------------------------------------------
      ----------------------------- - --------------------------------------- - ---- - ----------------------

      -- ------------ -
        -------------------------- - -----
      -

      -- ----------------- -
        ----------------------- - ----------------
      -

      -- --------- -- ---------- -
        -------------------------------- ----------- -------- --------- -------- ----------
      -
      ---- -
        ------------------------------- -- -- ---------- -------- ------- ----------
      -

      --- ------ - -----
      --- -
        ------ - ------------------------------------- --- -
          --- - ----
          --- - --------------
          ------ - ----
        ---
        ------------------------------------ ------ ---- -- -- --- --- ---- ---------- ------------
      - -------- -
        ------------------------------- -- ------- ---- ---- ------- ------- -- -- ----------
        ---------------------------------------------- -------------------------- -
          ----- - ------- -- ------- ---- ---- ------- ------- -- -
        ---
        ------ ----
          --- - ------- --- ----- -- ------ -------
          ----- - ------
          ------- - -----
        ---
      -

      -- -----
      ------------------------ -------------- -
        ------------------------------ -
          ----- - ----------
          ---- - ---------------
        ---
      ---

      ------------------------ -------------- -
        ------------------------------ -
          ----- - ----------
          ---- - ---------------
        ---
      ---

      -------------------------------------- --------------------------------------------------------------------
      -------------------------------------- ------------ ------ ---- -- ------------ --- --- ------------------
      -------------------------------------- --------------------------------------------------------------------

      -------------------- ------------- -
        --------------------------- -
          ----------- - ----------- -- ---
          ----------------- - ----------
          ----------------  - ---------

          --------------- ------- ---- -----

          -- --------- --- -------------- -
            --------------------------- ----------
          -
          ---- -- --------- -- -------------------- -
            --------------------------------- ----------
          -
          ---- -- --------- -- -------------- -
            --------------------------- -
              --- -------
              ----- --------------
              ------ ---------------
              ------ ---------
            ---
          -
          ---- -- --------- -- ---------- -
            ----------------------- -
              --- -------
              ---- -------------
              ----- - ----------
              ----- --------------
              ------ ---------------
              -------- -----------
            ---
          -
          ---- -- --------- -- ------------- -
            -------------------------- -
              --- -------
              -------- -----------
            ---
          -
          ---- -- --------- --- ---------------- -
            ---------------------------- -
              ------ ----------
              --- - --------
            ---
          -
          ---- -- --------- --- -------------------- -
            --------------------------------- --------- -------------
          -
          ---- -- --------- -- ----------------------- -
            ------------------------------------ -------------
          -
          ---- -- ---------------- -
            -------------------- ------ ------- ---- -----
          -
        ---
      ---

      ------------------- -------- ---------------- -
        ------------------------------- -- --- -- ---- ------- ------- -------------
        ---------------------------- -
          ------- - -
            ----- - ----------
            ---- - --------
          --
          ------ - -----------------------------------
          -------- - ------
          --- - ---
        ---
      ---

      --- - -----------

      -- ---- ------ -------- -
        ---- -----------
        ------- --------------
        ------- -------------
      ---
    -
  --
--

总结

在Windows系统下使用PM2启动应用可能会出现无法正常启动的问题,原因是进程ID的取值范围不同。为了解决这个问题,需要修改PM2的代码,将使用-1表示无效的进程ID的方式改为使用0。这个问题解决后,我们就可以在Windows系统下愉快地使用PM2进行进程管理了。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64905c1b48841e9894e8582b

纠错
反馈