Bash脚本' kill -0' while循环中的选项

时间:2015-11-13 09:08:43

标签: linux bash while-loop signals

我必须编写bash脚本,扩展cp,提供复制速度和ETA。在互联网上,我发现使用while kill -0 $pid; do循环的脚本。它对我有用,但我不能理解为什么它有效。 -0选项的作用。

我的脚本就是这样:

#!/bin/bash
cp $1 $2 &
pid=$!
trap "kill $pid 2> /dev/null" EXIT

olddst_size=0

sleep 1

while kill -0 $pid 2> /dev/null; do

    src_size=$(ls -l $1 | cut -d " " -f5)
    dst_size=$(ls -l $2 | cut -d " " -f5)

    diff_size=$(($src_size - $dst_size))

    # Speed in MB/s

    speed=$(bc -l <<< "scale=4;$(($dst_size-$olddst_size))")
    olddst_size=$dst_size

    #ETA

    eta=$(bc -l <<< "scale=0;($diff_size/$speed)")

    echo -ne "                                                          "\\r

    echo -ne "Copying speed:" $speed "B/s" "ETA:" $eta "s"\\r

    sleep 1

done
echo -ne "                                                         "\\r`

1 个答案:

答案 0 :(得分:3)

通常,您指定要发送到进程的信号作为-0的参数。 {{1}}具有特殊含义 - 它不会发送信号,只是检查进程是否仍在运行。