gpt4 book ai didi

linux - Bash 脚本 : can not properly handle SIGTSTP

转载 作者:IT王子 更新时间:2023-10-29 00:14:04 27 4
gpt4 key购买 nike

我有一个安装和卸载设备的 bash 脚本,它在两者之间执行一些读取操作。由于设备非常慢,脚本大约需要 15 秒才能完成(挂载至少需要 5-6 秒)。由于挂载此设备会导致其他问题,因此我不希望此脚本被中断。

话虽如此,我可以正确处理 SIGINT (Ctrl+c),但是当我尝试处理 SIGTSTP (Ctrl+z) 时,脚本会卡住。这意味着信号被捕获但处理程序不运行。

#!/bin/sh
cleanup()
{
# Don't worry about unmounting yet. Just checking if trap works.
echo "Quitting..." > /dev/tty
exit 0
}
trap 'cleanup' SIGTSTP
...

我必须手动向进程发送 KILL 信号。知道为什么会发生这种情况以及如何解决它吗?

最佳答案

直到当前正在执行的进程终止,shell 才会执行陷阱。 (至少,这是 bash 3.00.15 的行为)。如果通过 ^c 发送 SIGINT,它会被发送到前台进程组中的所有进程;如果当前正在执行的程序接收到它并终止,那么 bash 可以执行陷阱。通过 ^z 与 SIGTSTP 类似; bash 接收到信号但直到正在运行的程序终止时才执行陷阱,如果它采用默认行为并被挂起,它就不会执行。尝试将 ... 替换为简单的 read f 并注意陷阱会立即执行。

关于linux - Bash 脚本 : can not properly handle SIGTSTP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12824637/

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