终止调用 shell 脚本中的 运行 程序
terminate a running program in the calling shell script
我写了一个 shell 脚本 A,它在其中调用另一个脚本 B。B 所做的是 运行 一些计算并创建一个文本文件。
我不拥有B的代码,A因为非技术原因不得不在前台调用它。
B 计算和创建文本用时不到 1 分钟,但是,B 不会自行结束,return直到 6 分钟后才将控制权交给 A。
现在用户抱怨为什么 运行 脚本 A 需要 7 分钟。
因此我的问题是如何重写 A 以检测文件已创建,从而立即终止 B 以重新获得控制权?如果 A 仍然必须 运行 B 在前台?可行吗?
希望我说清楚了。
谢谢!
约翰
此脚本在后台调用一个检查文件是否存在的函数,然后使用exec
运行 与原始脚本具有相同pid的脚本(这样的pid是通过[=12获得的) =]), 当文件被创建时 kill 被发送到这个 pid 然后 exec
'ed 脚本被杀死:
#!/bin/bash
function checkAndKill {
local pid=
local filename=
while [ ! -e $filename ]; do
sleep 1
done
kill $pid
}
checkAndKill $$ /path/of/the/file/to/check &
exec B.sh
我写了一个 shell 脚本 A,它在其中调用另一个脚本 B。B 所做的是 运行 一些计算并创建一个文本文件。
我不拥有B的代码,A因为非技术原因不得不在前台调用它。
B 计算和创建文本用时不到 1 分钟,但是,B 不会自行结束,return直到 6 分钟后才将控制权交给 A。
现在用户抱怨为什么 运行 脚本 A 需要 7 分钟。
因此我的问题是如何重写 A 以检测文件已创建,从而立即终止 B 以重新获得控制权?如果 A 仍然必须 运行 B 在前台?可行吗?
希望我说清楚了。
谢谢! 约翰
此脚本在后台调用一个检查文件是否存在的函数,然后使用exec
运行 与原始脚本具有相同pid的脚本(这样的pid是通过[=12获得的) =]), 当文件被创建时 kill 被发送到这个 pid 然后 exec
'ed 脚本被杀死:
#!/bin/bash
function checkAndKill {
local pid=
local filename=
while [ ! -e $filename ]; do
sleep 1
done
kill $pid
}
checkAndKill $$ /path/of/the/file/to/check &
exec B.sh