我已经使用vorpal在nodejs中编写了一个cli应用程序,生活在freebsd(v9.3)中,我需要知道是否有任何方法可以阻止用户退出此应用程序!我希望它像应用程序启动时一样,在重启或关闭系统之前永远不会退出。这非常关键,我的意思是无法不惜任何代价退出应用程序。 它有可能吗?
编辑: 这就是我想要的:当我的程序启动时,用户无法退出程序,除了我自己的退出命令,所以我想以某种方式阻止CTRL-Z,CTRL-C或任何其他类似的东西。我可以处理SIGINT和错误但我的问题是" CTRL-Z"它会触发SIGSTOP信号并且节点无法收听它。我怎么能禁用这个CTRL-z和其他人呢?或者我的代码中是否还有其他解决方案,甚至修改bsd?
答案 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):
supervisor
:https://www.npmjs.com/browse/keyword/supervisor pm2
:https://www.npmjs.com/package/pm2 forever
:https://www.npmjs.com/package/forever 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
),除了使用某些自动重启服务之外,您无能为力,就像我上面描述的那样。我建议你开始使用它们。