防止 nodejs 应用程序退出
Prevent a nodejs application from exiting
我有一个使用 vorpal 在 nodejs 中编写的 cli 应用程序,住在 freebsd (v9.3) 中,我需要知道是否有任何方法可以防止用户退出此应用程序!我希望它像应用程序启动时一样,在重新启动或关闭系统之前永远不会退出。这是非常关键的,我的意思是无论如何都无法退出应用程序。
有可能吗?
编辑:
这就是我想要的:当我的程序启动时,除了我自己的退出命令之外,用户无法退出程序,所以我想以某种方式阻止 CTRL-Z、CTRL-C 或任何其他类似的东西。我可以处理 SIGINT 和错误,但我的问题是 "CTRL-Z" 会触发 SIGSTOP 信号并且节点无法收听它。我怎样才能完全禁用此 CTRL-z 和其他功能?或者我的代码中是否有任何其他解决方案,甚至修改 bsd?
有几种方法可以完成此操作,具体取决于您的要求:
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, but please don't do it, this answer explains why: . Also you can apparently ignore Control-C keypresses with this module: https://www.npmjs.com/package/ctrl-c(我没有仔细研究),但这似乎也是个坏主意。
无论如何,如果您正在使用的进程将被系统或其他用户终止(例如,使用 kill -9
),除了使用一些自动重启服务外,您无能为力,例如我在上面描述过。我建议你开始使用它们。
我在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);
}
我有一个使用 vorpal 在 nodejs 中编写的 cli 应用程序,住在 freebsd (v9.3) 中,我需要知道是否有任何方法可以防止用户退出此应用程序!我希望它像应用程序启动时一样,在重新启动或关闭系统之前永远不会退出。这是非常关键的,我的意思是无论如何都无法退出应用程序。 有可能吗?
编辑: 这就是我想要的:当我的程序启动时,除了我自己的退出命令之外,用户无法退出程序,所以我想以某种方式阻止 CTRL-Z、CTRL-C 或任何其他类似的东西。我可以处理 SIGINT 和错误,但我的问题是 "CTRL-Z" 会触发 SIGSTOP 信号并且节点无法收听它。我怎样才能完全禁用此 CTRL-z 和其他功能?或者我的代码中是否有任何其他解决方案,甚至修改 bsd?
有几种方法可以完成此操作,具体取决于您的要求:
1) 使用外部工具在退出或崩溃时重新启动进程(如 Khauri McClain 在评论中所说)。其中一些是(我最喜欢的是pm2):
supervisor
: https://www.npmjs.com/browse/keyword/supervisorpm2
: https://www.npmjs.com/package/pm2forever
: https://www.npmjs.com/package/forever
2) 您可以防止 Node.js 在出现错误时退出:Make node.js not exit on error, but please don't do it, this answer explains why: . Also you can apparently ignore Control-C keypresses with this module: https://www.npmjs.com/package/ctrl-c(我没有仔细研究),但这似乎也是个坏主意。
无论如何,如果您正在使用的进程将被系统或其他用户终止(例如,使用 kill -9
),除了使用一些自动重启服务外,您无能为力,例如我在上面描述过。我建议你开始使用它们。
我在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);
}