停止由 bash 发起的几个命令

停止由 bash 发起的几个命令

我写了以下脚本

#!/bin/bash

topic_list=$(echo $1 | tr ":" "\n")
for topic in ${topic_list}
    do
        echo "calling hz on "${topic}
        name=$(basename "${topic}")
        run_command ${topic} >&1 | tee ${name}.log
    done

本来我只是打电话

run_command ${topic} >&1 | tee ${name}.log

它使用适当的参数运行我想要的命令,并将结果放入文件中,同时将输出显示到控制台。当我想停止它时,我输入了 Ctrl-C

但是现在我需要同时针对多个主题多次运行此命令。(因此脚本)

我对此有两个问题:

  1. 我认为将命令多次运行的输出显示到控制台是不行的,所以我需要修改它,以便输出仅发送到一个文件。所以为此我想我会这样做run_command ${topic} > ${name}.log
  2. 最重要的是,我如何停止这些命令?

如果我运行,此脚本run_command将立即运行,那么一旦我完成,立即停止所有脚本的最佳方法是什么?

注意:我虽然做了 ps 并 kill 但是:

  • 当我执行 ps 时,什么都没有显示,所以我执行了,ps -a结果就出现了run_command。然而
  • 似乎当我运行时run_command,其他进程也会启动,因为我可以看到包括在内的其他进程sudo,当我对命令执行 ctrl-c 时,这些进程都消失了。

是的,实际上run_command是一个 shell 脚本,它调用另一个 shell 脚本,该脚本又调用另一个 shell 脚本,该脚本又调用已编译的程序。其他脚本以 root 身份运行,而 则由run_command我以用户身份运行。kill 是否能run_command终止进程?那么我该如何终止多个run_commands

答案1

在 Linux 中终止多个同名进程的一种可能方法是通过命令:

killall <process name>

您可以使用正则表达式,发送不同的信号等。

注意!不要在 UNIX 中使用此命令,因为它将执行名称所说的操作,终止操作系统中的所有进程。

相关内容