使用 socket-io Nodejs 处理带有 spawn (start, termination) 的作业

handling a job with spawn (start, termination) with socket-io Nodejs

我这里有两个问题:

  1. 有什么方法可以管理child_proccess(生成)哪个运行 nodejs?

  2. suppose 我有一个开始执行某些功能的脚本,我需要使用 socket.io 事件开始执行。我需要用另一个套接字 io 事件停止执行。

我的第一个想法是:

使用spawn开始执行命令,并将作业的PID存储在Redis中。在停止事件中,从 Redis 获取 PID 并使用以下命令用另一个 spawn 终止该进程:

kill = spawn(`kill ${PID}`)

但是 os 内核不允许 nodejs 终止该进程,除非 nodejs 使用 sudo 运行 command.I 是 的所有者child_procces。为什么我不能阻止它?

第二个想法是使用全局变量:

io = ()=>{
let job = null;
socket.on("start", ()=>{
    job = spawn("path/to/my/script")
})
socket.on("stop", ()=>{
   job.kill() // or procces.kill(job.pid)
})


}

所以我对使用 nodejs 管理子进程感到很困惑。

首先你需要用 var 关键字声明你的工作变量。

当您执行 spawn 命令时,spawn 它会自行生成两个子进程。你可以使用这个技巧来终止负责你的工作的主要子进程。

let PID = job.pid

kill = spawn(`kill ${PID+1}`)

这不是理想的答案,但如果您的子进程仅限于短号码,那将完成您的工作