2017-12-27 399 views
2

我寫了一個簡單的函數,重新啓動/關閉應用程序。重新啓動不起作用,我不知道爲什麼。子進程啓動,然後立即關閉。我試圖從孩子那裏抓到錯誤,但沒有錯誤。不能產生子進程

async function Shutdown(message,restart){ 
    if(message) console.log(message) 

    await Logout() 

    if(restart){ 
     let proc = childprocess.spawn(process.argv[0],process.argv.splice(1),{ 
      "detached": true, 
     }) 
    } 
    process.exit(0) 
} 
+0

我相信'process.exit(0)'使其關機沒有錯誤,產生與'console.log'更多的輸出,也看看像https://github.com/Unitech/pm2這樣的東西來管理你的流程。 – Gntem

+0

我試圖檢查孩子的退出代碼,但它退出0 proc.on('exit',function(code){console.log(code)}) – EntityinArray

回答

2

documentation

當使用分離選項來啓動一個長期運行的進程,除非它具備 過程不會留在父後在後臺運行退出 未連接 到父級的stdio配置。

所以加stdio: 'ignore'或其他方法,使兒童的過程中保持活着

let proc = childprocess.spawn(process.argv[0],process.argv.splice(1),{ 
      detached: true, 
      stdio: 'ignore' 
    }) 
    proc.unref(); 
+0

我試過了,子進程仍然立即關閉。 – EntityinArray