阻止nodejs应用程序退出

时间:2017-07-09 12:29:05

标签: javascript node.js command-line-interface freebsd

我已经使用vorpal在nodejs中编写了一个cli应用程序,生活在freebsd(v9.3)中,我需要知道是否有任何方法可以阻止用户退出此应用程序!我希望它像应用程序启动时一样,在重启或关闭系统之前永远不会退出。这非常关键,我的意思是无法不惜任何代价退出应用程序。 它有可能吗?

编辑: 这就是我想要的:当我的程序启动时,用户无法退出程序,除了我自己的退出命令,所以我想以某种方式阻止CTRL-Z,CTRL-C或任何其他类似的东西。我可以处理SIGINT和错误但我的问题是" CTRL-Z"它会触发SIGSTOP信号并且节点无法收听它。我怎么能禁用这个CTRL-z和其他人呢?或者我的代码中是否还有其他解决方案,甚至修改bsd?

2 个答案:

答案 0 :(得分:2)

我在W3 Consortium中找到了答案,在此我想与您分享相同目的的人。

如该论坛中所述,我需要将程序包装在可以检测和忽略信号的C程序中。这是这样的:

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>

int
main(int argc, char *argv[])
{
        /* Ignore signals from keyboard */
        signal(SIGINT, SIG_IGN);
        signal(SIGTSTP, SIG_IGN);
        signal(SIGQUIT, SIG_IGN);

    system("node path/to/your/program");
    /* Whatever needs to be done if this point is reached. */
    return (0);
}

答案 1 :(得分:0)

有几种方法可以实现这一点,取决于您的要求:

1)使用外部工具在退出或崩溃时重启过程(如Khauri McClain在评论中所说)。其中一些是(我最喜欢的是pm2):

2)您可以阻止Node.js退出错误:Make node.js not exit on error,但请不要这样做,这个答案解释了原因:https://stackoverflow.com/a/13049037/1206421。此外,您可以使用此模块忽略Control-C按键:https://www.npmjs.com/package/ctrl-c(我没有查看它),但这似乎也是一个坏主意。

无论如何,如果您正在使用的进程将被系统或其他用户杀死(例如,使用kill -9),除了使用某些自动重启服务之外,您无能为力,就像我上面描述的那样。我建议你开始使用它们。