gpt4 book ai didi

linux - 'kill -0'(杀死破折号零)选项在 while 循环中做什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:08:15 26 4
gpt4 key购买 nike

我必须编写扩展 cp 的 bash 脚本,以提供复制速度和 ETA。在互联网上,我找到了使用 while kill -0 $pid; 的脚本。做循环。它对我有用,但我不太明白为什么它会起作用。 -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 有一个特殊的含义 - 它不发送信号,它只是检查进程是否仍在运行。


来自 man kill 的相关部分:

NAME
kill - terminate a process

SYNOPSIS
kill [-signal|-s signal|-p] [-q value] [-a] [--timeout mil‐
liseconds signal] [--] pid|name...
kill -l [number] | -L

DESCRIPTION
The command kill sends the specified signal to the specified
processes or process groups.

[..]

If signal is 0, then no actual signal is sent, but error check‐
ing is still performed.

[-signal|-s signal|-p] 部分令人困惑,但要点是

kill -0

只能表示

kill -s 0
kill --signal 0

关于linux - 'kill -0'(杀死破折号零)选项在 while 循环中做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33689163/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com