我想构建一个执行命令的bash脚本,同时执行其他操作,如果脚本被杀死,则有可能杀死该命令。例如,执行一个大文件的cp,同时打印自复制开始以来经过的时间,但是如果脚本被杀死,它也会杀死副本。我并不想用rsync的,原因有二:1)是缓慢的,2)我想学习如何做到这一点,它可能是有用的。我尝试了这个:
until cp SOURCE DEST
do
#evaluates time, stuff, commands, file dimensions, not important now
#and echoes something
done
但它不执行该do - done
块,因为它正在等待副本结束。你能建议点什么吗?
until
与相对while
。与另一个命令运行时的处理无关。为此,您需要使用在后台运行任务&
。
cp SOURCE DEST &
pid=$!
# If this script is killed, kill the `cp'.
trap "kill $pid 2> /dev/null" EXIT
# While copy is running...
while kill -0 $pid 2> /dev/null; do
# Do stuff
...
sleep 1
done
# Disable the trap on a normal exit.
trap - EXIT
kill -0
检查进程是否正在运行。请注意,顾名思义,它实际上并没有发出信号并杀死进程。至少没有信号0。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句