【问题标题】:Prevent a nodejs application from exiting防止 nodejs 应用程序退出
【发布时间】:2018-07-10 12:18:12
【问题描述】:

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

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

【问题讨论】:

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


【解决方案1】:

有几种方法可以做到这一点,具体取决于您的要求:

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),除了使用一些自动重启服务之外,您无能为力,就像我上面描述的那样。我建议你开始使用它们。

【讨论】:

  • 我不希望终端访问,所以没有 kill -9 等,当用户登录时,我的程序启动并且用户无法访问任何其他东西。我可以处理 SIGINT 和错误,但我的问题是“CTRL-Z”会触发 SIGSTOP 信号并且节点无法收听它。我怎样才能完全禁用这个 ctrl-z ?也许在我的代码中,甚至修改 bsd?
【解决方案2】:

我在freebsd forums找到了我的答案,在这里我想和你分享给有相同目的的人。

正如那个论坛中提到的,我需要将我的程序包装在一个可以检测和忽略信号的 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);
}

【讨论】:

    猜你喜欢
    • 2017-10-23
    • 1970-01-01
    • 1970-01-01
    • 2022-07-27
    • 1970-01-01
    • 1970-01-01
    • 2017-04-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多