我在节点js中编写了一个小服务器,该服务器在启动时作为服务启动
我的/etc/init.d/lightserver看起来像这样:
# Actions
case "$1" in
start)
# START
/usr/bin/lightserver
;;
stop)
# STOP
;;
restart)
# RESTART
;;
esac
exit 0
我希望能够使用命令“ /etc/init.d/lightserver stop”正确停止服务器。不使用kill或killall。
如何在我的服务器中实现此功能?
var i = 0;
var connect = require('connect');
var sleep = require('sleep');
var exec = require('child_process').exec;
var j = 1;
var server = connect().
use(function(req, res) {
i++;
res.write('Hello World! ' + i);
res.end();
let code = 83028 + j;
j = 1 - j;
exec("./433Utils/RPi_utils/codesend " + code, function(error, stdout, stderr) {
console.log(stdout);
});
}).listen(64084);
console.log("Server has started and is listening to http://localhost:64084/");
答案 0 :(得分:1)
我认为您正在寻找类似的东西?
process.on('SIGTERM', () => {
// some other cleanup code
server.close();
});
这是拦截kill命令并正常关闭服务器,而不是在没有警告的情况下突然停止进程。
要优雅地结束该过程,您可以只使用kill <PID>
命令,因为SIGTERM
是默认值。但是,如果您想确保已使用sigterm,则可以始终选择使用kill -SIGTERM <PID>
,它会发送SIGTERM
用于终止的默认信号是TERM。使用-l或-L列出可用的 信号。特别有用的信号包括HUP,INT,KILL,STOP, CONT和0。可以通过三种方式指定备用信号:-9 -SIGKILL -KILL。负PID值可用于选择整体 流程组;请参阅ps命令输出中的PGID列。 PID为-1 很特别它指示除kill进程本身以外的所有进程 和初始化。