【问题标题】:Bash script: Kill one process when other completesBash脚本:当其他进程完成时杀死一个进程
【发布时间】:2014-01-10 16:33:58
【问题描述】:

我正在尝试编写一个 bash 脚本,以使用不同的命令行选项一个接一个地运行一个进程大约 1024 次。然而,其中一个进程包含一个无限循环,我试图在循环的另一次迭代开始之前终止该进程。

所以这是我迄今为止尝试过的(prog1 包括无限循环,我想在 papi 完成运行时杀死它):

#!/bin/bash
for (( i=0; i<32780; i+=32))
do
    ./prog1 $i &
    pid=$!;
    sleep 5s
    ./papi
    kill -s 2 $pid
done

但是它不会杀死任何prog1 实例,当然它会在每次迭代开始时继续创建它们。我做错了什么?

【问题讨论】:

  • prog1 是否忽略信号 2?如果你使用 KILL 会起作用吗?
  • 杀死是否从您的脚本外部工作?你试过“kill -9”吗?
  • 你为什么使用 SIGINT? kill 的默认值是 SIGTERM,如果使用它会发生什么?
  • 好吧,SIGTERM 被正确杀死了。我看到了很多关于 SIGINT 的例子,因此我使用了它,但我认为这不是问题的根源。如果你能用这个信息写一个答案,我很乐意接受。

标签: linux bash


【解决方案1】:

它在完成之前杀死一个进程:

pkill $!

例如:

telnet 192.168.1.1  1>/dev/null 2>&1 &
pkill $!

【讨论】:

    猜你喜欢
    • 2011-01-10
    • 2016-01-24
    • 2013-01-16
    • 1970-01-01
    • 2012-09-27
    • 1970-01-01
    • 1970-01-01
    • 2016-03-23
    • 2018-08-28
    相关资源
    最近更新 更多