新贵导致两个过程 - 为什么?

时间:2012-11-30 02:29:42

标签: linux bash upstart

我正在使用upstart来启动使用NVM(节点版本管理器)的NodeJS进程。

upstart命令是这样的:

description "Service to start node app"
author "Barry Steyn"

setuid devuser
setgid devuser

env DIR=/home/devuser/nodejs/authentication

script
    chdir $DIR
    exec bash -c 'source /home/devuser/nvm/nvm.sh && node app'
end script

respawn

这可以很好地启动节点,但是当我执行ps wax | grep node时,我得到了这两个过程:

 4284 ?        Ss     0:00 bash -c source /home/devuser/nvm/nvm.sh && node app
 4316 ?        Sl     1:09 node app

为什么我要获得两个流程?这无论如何效率都不高?

1 个答案:

答案 0 :(得分:0)

第一个进程是bash的实例,它启动了node.js.第二个过程是实际的node.js过程。

bash进程正在使用一些资源(主要是内存),但只是等待node.js等待退出。

我相信你可以通过这样做摆脱额外的狂欢:

替换:

exec bash -c'source /home/devuser/nvm/nvm.sh& amp ;& amp;节点app'

使用:

exec bash -c'source /home/devuser/nvm/nvm.sh& amp ;& amp; exec 节点应用

这使得bash进程在不使用fork的情况下执行node.js。大多数情况下,这意味着它不会等待node.js退出。