gpt4 book ai didi

bash - 在 bash 中使用 trap 终止函数

转载 作者:行者123 更新时间:2023-11-29 09:50:37 24 4
gpt4 key购买 nike

我在 bash 中有一个函数,称之为“计时器”,它只显示经过的秒数。目前,它在一个单独的进程中运行,父进程在完成后将其杀死。

我希望函数以某种方式捕获信号并优雅地退出,但我不知道如何实现。这是现在的示例脚本:

#!/bin/bash

function timer () {

t0=$(date +%s)

while true ; do
t=$(date +%s)
echo -en "\r$(($t - $t0))"
done
}

timer &
pid=$!
echo $pid

sleep 5 # do something while timer runs
echo "done"
kill -9 $pid

最佳答案

两件事:

  1. 不要使用kill -9 来杀死它。 SIGKILL 无法捕获。它不会让目标进程进行任何清理。只需简单地执行 kill 即可发送 SIGTERM 信号。

  2. 您可以捕获 SIGTERM。您还可以捕获 SIGINT 以捕获 Ctrl-C。或者最好是,无论脚本如何终止,都陷入 EXIT 以进行清理。

function timer () {
trap 'echo -e "\ntimer stopped"' EXIT

t0=$(date +%s)

while true ; do
t=$(date +%s)
echo -en "\r$(($t - $t0))"
done
}

timer &
pid=$!
echo "$pid"

sleep 5 # do something while timer runs
echo "done"
kill "$pid"

关于bash - 在 bash 中使用 trap 终止函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47772128/

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