【发布时间】:2020-08-09 04:36:41
【问题描述】:
我正在尝试创建一个子进程来建立远程访问。该过程本身运行良好,但我很难终止该过程。该进程被杀死但再次产生。我也尝试过使用 exec 和 execFile 但它不起作用。我是node初学者,如有小错误请见谅。
app.post('/:vdms_id/:docker_id/:tool', async(req, res) => {
let vdms_id = req.params.vdms_id;
let docker_id = req.params.docker_id;
let tool = req.params.tool;
switch (tool) {
case 'remote-access':
try{
if(req.body.host){
//Run remote access commands here
const child = spawn("docker",["exec",`${docker_id}`,"tcptunnel",`--local-port=${req.body.free_port}`,`--remote-port=${req.body.private_port}`,`--remote-host=${req.body.private_ip}`,"--stay-alive","--fork"]);
// Write PID along with private IP and port to DB here
await new RemoteAccess({
pid:child.pid,
username:req.body.username,
vdms_id:vdms_id,
docker_id:docker_id,
free_port:req.body.free_port,
private_ip:req.body.private_ip,
private_port:req.body.private_port,
timestamp:Date.now()
}).save();
console.log('PID WAS SAVED TO DB');
return res.json({success:true});
}
case 'end-remote-access':
let result = await RemoteAccess.findOne({private_port:req.body.private_port,username:req.body.username});
console.log("REMOTE_ACCESS",result);
// Kill the child process here
process.kill(result.pid);
【问题讨论】:
标签: node.js docker express child-process zombie-process