gpt4 book ai didi

Linux:如何终止 sleep

转载 作者:IT王子 更新时间:2023-10-29 00:50:44 26 4
gpt4 key购买 nike

更多的是概念性问题。如果我写一个 bash 脚本做类似的事情

control_c()
{
echo goodbye
exit #$
}

trap control_c SIGINT

while true
do
sleep 10 #user wants to kill process here.
done

当 sleep 10 运行时,control+c 不会退出。是因为 linux sleep 忽略了 SIGINT 吗?有没有办法避免这种情况并让用户能够从 sleep 状态中按 cntrl+c?

最佳答案

你所描述的与中断信号是一致的,中断信号只会到达你的 bash 脚本,而不是进程组。您的脚本收到信号,但 sleep 没有,因此您的陷阱只有在 sleep 完成后才能执行。标准技巧是在后台运行sleep 并在其上运行wait,以便wait 接收到中断信号。然后,您还应该显式地向任何仍在运行的子进程发送 SIGINT,以确保它们退出。

control_c()
{
echo goodbye
kill -SIGINT $(jobs -p)
exit #$
}

trap control_c SIGINT

while true
do
sleep 10 &
wait
done

关于Linux:如何终止 sleep ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32041674/

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