在调用shell脚本中终止正在运行的程序

时间:2015-03-02 15:58:28

标签: shell unix

我写了一个shell脚本,A,它调用另一个脚本,B。B做的是运行一些计算并创建一个文本文件。

我不拥有B的代码,而且由于非技术原因,A必须在前台调用它。

B计算和创建文本的时间不到1分钟,但是B不会自行结束并将控制权返回给A,直到6分钟后。

现在用户抱怨为什么运行脚本A需要7分钟。

因此,我的问题是如何重写A以检测文件是否已创建,从而立即终止B以重新获得控制权?如果A仍然需要在前台运行B?它可行吗?

希望我已经清楚了。

谢谢! 约翰

1 个答案:

答案 0 :(得分:2)

此脚本在后台调用一个函数来检查文件是否存在,然后使用exec运行脚本与原始脚本的相同pid(这样的pid是通过$$获得的),当创建文件后,kill被发送到此pid,然后exec' ed脚本被终止:

#!/bin/bash
function checkAndKill {
    local pid=$1
    local filename=$2
    while [ ! -e $filename ]; do 
       sleep 1
    done
    kill $pid
}

checkAndKill $$ /path/of/the/file/to/check &

exec B.sh