在Node.js中,我想杀死在端口1337
上运行的服务器。 process.kill(pid)
似乎是这样做的方式。但是我如何获取在Node.js中在端口1337
上运行的服务器的pid?
我看到了很多关于如何使用ps
和lsof
执行此操作的示例。有没有办法在不依赖Node.js中的shell命令的情况下解决这个问题?
依靠lsof
:
Number(child_process.execSync('lsof -i :1337 -t'))
答案 0 :(得分:0)
如果您从另一个nodejs进程启动服务器作为子进程,则只需执行child.pid
即可获取服务器进程的pid。
示例:
var child = child_process.spawnSync(command[, args][, options]);
console.log(child.pid);
process.kill(child.pid);
答案 1 :(得分:0)
要回答我的问题,我可以使用port-pid
包确定端口上的pid:https://www.npmjs.com/package/port-pid
然而,为了解决我的问题,我改为采用了这样一种理念,即端口正在使用“有充分的理由”,而是选择通过包装require('child_process').spawn
来杀死子进程。
var childProcess = require('child_process');
var spawn = (function () {
var children = [];
process.on('exit', function () {
children.forEach(function (child) {
child.kill();
});
});
return function () {
var child = childProcess.spawn.apply(childProcess, arguments);
children.push(child);
return child;
};
}());
spawn('node', ['server/server.js'])