簡體   English   中英

while循環中的Bash腳本'kill -0'選項

[英]Bash script 'kill -0' option in while loop

我必須編寫bash腳本來擴展cp從而提供復制速度和ETA。 在互聯網上,我找到了while kill -0 $pid; do使用的腳本while kill -0 $pid; do 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`

通常,您指定要發送到進程的信號作為kill的參數。 -0有特殊含義-它不發送信號,它只是檢查進程是否仍在運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM