在NodeJS中正确使用process.exit

时间:2013-11-12 17:19:13

标签: javascript node.js unix process

我想首先说我是一个完整的NodeJS noobie。

因此,正如所说的那样,当我使用NodeJS的Cluster API和process.exit时,我正试图更好地理解父进程和子进程的行为。我也意识到所有这些疑虑都与Unix本身的行为有关。

我知道process.exit()会导致当前流程退出并使用“成功”代码0

对于我的测试,我有2个文件:index.jsindexWorker.js

以下是index.js的样子:

var cluster = require('cluster');

if (cluster.isMaster) {

    // Setup the required fork behavior.
    cluster.setupMaster({
            exec: 'indexWorker.js'
    });

    var cpuCount = require('os').cpus().length;

    // Create a worker for each logical core.
    for (var i = 0; i < cpuCount; ++i) {
        cluster.fork({'NODE_ENV': 'development'});
    }

    console.log('Calling process.exit on parent.');
    process.exit();

}

这就是indexWorker.js的样子:

var cluster = require('cluster');

console.log("Started worker having ID: " + cluster.worker.id);

以下是我的疑问/疑问:

怀疑1

现在,由于我在父母身上使用process.exit,我的理解是所有工人流程都应该成为孤儿进程。但是,首先,在我执行^C之前,控件不会返回到我的终端窗口,尽管父(index.js)正在立即退出。此外,psps -axps -elf | grep <pattern>似乎并不认为有任何节点程序正在运行。 所以我的疑问是:为什么控制权没有回到终端,为什么ps没有向我展示任何东西?

怀疑2

如果我从process.exit中移除index.js,我的理解是控件不会返回到我的终端,因为尽管父级已经完成了它的任务,但是子进程正在运行,因此父进程没有退出了。这是正确的理解还是我错过了什么?

怀疑3

如果我从cluster.fork删除了process.exit()来电和index.js来电,则脚本会立即完成并将控制权返回到我的终端窗口,因为index.js没有做太多工作在那种情况下。

但是,正如您所看到的,indexWorker.js也没有进行任何长时间的操作。它只是打印一个控制台消息。在这种情况下,为什么流程仍在运行?该行为是否应该与父进程相同,即在脚本完成时退出,从而最终将控制权返回给终端窗口?

我只是为所有这些测试运行node index.js;永远不会在后台放任何进程。我的测试是在Mac上运行。

这就是我现在所有的疑虑。 :)

我基本上一直在尝试将process.exit放在不同的地方并运行ps,因此我怀疑这些点。如果您有任何关于父/子过程行为的内容,我怀疑中没有涉及的内容,我将非常感激!它肯定会以某种方式帮助我和社区。

所以,先谢谢SO社区!

干杯!

0 个答案:

没有答案