gpt4 book ai didi

linux - 如何在 Unix/Linux 中控制调度程序启动的进程

转载 作者:太空宇宙 更新时间:2023-11-04 04:04:09 25 4
gpt4 key购买 nike

我有一个像这样的调度程序脚本(dispatcher.sh):

for system in a b c
do
cd /usr/xyz/$system/
mkdir -p /usr/xyz/$system/time
{ time `./run_program.sh;wait` ;} > /usr/xyz/$system/time/time.log 2>&1 &
done

我写这个是为了启动每个文件夹中的run_program.sh并记录执行时间。每个 run_program.sh 中的任务各不相同,有些会派生子进程和孙进程。

  1. 我希望能够停止/终止每个 run_program.sh 及其派生子进程和孙进程。

  2. 我还想知道每个 run_program 的子进程和孙进程正在运行。有什么方法可以检查 fork 树吗?

编辑:

我的系统上没有 pstree,所以我很难直观地了解父进程和子进程之间的 pid 关系。如果我杀死父进程,子进程会被杀死吗?我目前使用的是

ps -eo pid,pgid,args | awk '{if($2==PGID){print $1}}' PGID=pid| xargs kill -9

杀死一个父进程的子进程。假设A fork B,B fork C(A->B->C),我杀掉进程B,C会自动杀掉吗?如何杀死包括A和B在内的进程?

最佳答案

如果这两个假设成立,则以下内容是正确的:

  1. run_program.sh 脚本不会在其任何子/孙脚本之前退出
  2. child /孙子不会成为 session 主持人。

如果是这种情况,那么您可以在新 session 中运行 run_program.sh,以便它及其所有子进程/孙进程具有相同的进程组 ID。

然后,您可以使用以下命令终止脚本及其所有子代/孙代:

kill -9 -PID

其中 PIDrun_program.sh 脚本本身的进程 ID。使用-PID将信号发送到进程组的所有成员。

您还可以使用如下命令列出子/孙子:

ps -eao pid,pgrp,args | awk '{if($2==PGRP){print $0}}' PGRP=PID

其中 PIDrun_program.sh 脚本本身的进程 ID。

您可以修改 run_program.sh 以将其 PID(shell 变量 $$)写入文件,以便您可以轻松检索它。

关于linux - 如何在 Unix/Linux 中控制调度程序启动的进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21952264/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com