Javascript nodejs:获取守护进程的子进程并杀死它们
我想构建一个节点应用程序,它允许我向一个守护进程的所有子进程发送Javascript nodejs:获取守护进程的子进程并杀死它们,javascript,node.js,process,kill,Javascript,Node.js,Process,Kill,我想构建一个节点应用程序,它允许我向一个守护进程的所有子进程发送kill-9 说清楚。 我们的服务器上有一个守护进程。开始时,它启动了一个与客户沟通的流程 当客户端向服务器发送新作业时,守护进程将创建一个新的子进程 所以现在我想获取守护进程的所有子进程,kill-9它们,然后用systemctl restart mydaemon.service重启守护进程 我搜索了谷歌,没有找到任何适合我的问题 我需要说的是,我想在不知道守护进程id的情况下解决这个问题,当然只有在可能的情况下 为什么我需要这个
kill-9
说清楚。
我们的服务器上有一个守护进程。开始时,它启动了一个与客户沟通的流程
当客户端向服务器发送新作业时,守护进程将创建一个新的子进程
所以现在我想获取守护进程的所有子进程,kill-9
它们,然后用systemctl restart mydaemon.service
重启守护进程
我搜索了谷歌,没有找到任何适合我的问题
我需要说的是,我想在不知道守护进程id的情况下解决这个问题,当然只有在可能的情况下
为什么我需要这个
我之所以需要这样做,是因为守护进程所属的软件有缺陷。我上面提到的沟通过程失败了,完全消失了。卖方表示,只需重新启动守护进程就可以杀死所有进程,当然不是这样。因此,由于卖家无法为我们的问题提供任何解决方案,我们目前正在以我现在想要的自动化方式重新启动服务。使用SIGKILL杀死所有child,然后重新启动守护进程
非常感谢各位。您可以使用
pstree
实用程序(递归)查找所有子进程。
很可能需要安装它。例如,在Mac上,您可以执行以下操作:brew安装pstree
然后,您可以运行此代码段来查找所有子进程并杀死它们:
const child_process=require('child_process');
const{promisify}=require('util');
const execAsync=promisify(child_process.exec);
(异步()=>{
const pids=等待执行异步(
`pstree${process.pid}sed的/[^0-9]*\\([0-9]*\\)./\\1/''grep-v“${process.pid}”`
);
//将PID连接到一行中,以空格分隔
const pidsString=pids.stdout.replace(/[\r\n]+/g',);
wait execAsync(`kill-9${pidsString}| | true`);
})();代码>非常感谢安东尼奥,但不幸的是,这不是我要搜索的。我不想获取我的节点应用程序的子项。我想杀死一个与我的节点应用程序无关的独立守护进程的子进程。或者我可以在通过守护进程搜索pid时对所有守护进程使用它吗?@floriantaut当然可以,只要使用deamon的pid而不是进程。pid
这里:pstree${deamon\u pid}sed's/[^0-9]*\([0-9]*\./\\1/'
您也不需要grep-v
部分。请让我知道它是否适合您。谢谢,我会尝试一下,您有一个简短的代码行如何通过守护程序名称捕获pid吗?@floriantaut您可以尝试pgrep processName
。顺便说一句,如果您决定从bash中杀死子进程。。。您可以简单地执行以下操作:pgrep processName | xargs pstree | sed的/[^0-9]*([0-9]*)./\1/'| xargs kill