[英]Prevent a nodejs application from exiting
我有一个使用vorpal用nodejs编写的cli应用程序,它生活在freebsd(v9.3)中,我需要知道有什么方法可以防止用户退出该应用程序! 我希望它像启动应用程序一样,直到重新启动或关闭系统后,它才会退出。 这是非常关键的,我的意思是没有办法不惜一切代价退出该应用程序。 有可能吗?
编辑:这就是我想要的:当我的程序启动时,用户只能退出自己的退出命令才能退出程序,所以我想以某种方式阻止CTRL-Z,CTRL-C或其他类似的东西。 我可以处理SIGINT和错误,但是我的问题是“ CTRL-Z”触发了SIGSTOP信号,节点无法监听它。 如何完全禁用此CTRL-z和其他按钮? 还是在我的代码中甚至还有修改bsd的方法,还有其他解决方案吗?
我在freebsd论坛中找到了答案,在这里我想与您分享相同目的的人。
如该论坛中所述,我需要将程序包装在可以检测和忽略信号的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)使用外部工具在退出或崩溃时重新启动过程(例如Khauri McClain在评论中说)。 其中一些是(我最喜欢的是pm2):
supervisor
: https : //www.npmjs.com/browse/keyword/supervisor pm2
: https : pm2
forever
: https : //www.npmjs.com/package/forever 2)您可以防止Node.js在错误时退出: 使node.js在错误时不退出 ,但是请不要这样做,此答案说明了原因: https : //stackoverflow.com/a/13049037/1206421 。 同样,您显然可以使用以下模块忽略Control-C按键: https : //www.npmjs.com/package/ctrl-c (我没有研究过),但这似乎也不是一个好主意。
无论如何,如果您正在使用的进程将被系统或其他用户kill -9
(例如,使用kill -9
),则除了使用某些自动重启服务(如上所述)之外,您无能为力。 我建议您开始使用它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.