我写了以下脚本
#!/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
但是现在我需要同时针对多个主题多次运行此命令。(因此脚本)
我对此有两个问题:
- 我认为将命令多次运行的输出显示到控制台是不行的,所以我需要修改它,以便输出仅发送到一个文件。所以为此我想我会这样做
run_command ${topic} > ${name}.log
- 最重要的是,我如何停止这些命令?
如果我运行,此脚本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 中使用此命令,因为它将执行名称所说的操作,终止操作系统中的所有进程。