gpt4 book ai didi

linux - UNIX 中的陷阱命令

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:57:25 24 4
gpt4 key购买 nike

trap 命令在这段代码中是如何工作的?

trap "ignore" 2
ignore()
{
main
}
main()
{
trap "main" 2
while [ 1 ]
do
echo -e "\t\t\t1.Add\n\t\t\t2.Remove\n\t\t\t3.Edit\n\t\t\t4.Search\n\t\t\t5.Display\n\t\t\t6.Exit"
echo "Enter the option"
read option
case $option in
1)echo "You take add option";;
2)echo "You take Remove option";;
3)echo "You take Edit option";;
4)echo "You take Search option";;
5)echo "You take Display option";;
6)exit;;
*)echo "Invalid Option"
esac
done
}

main

如果执行上面的脚本,ctrl+c信号被捕获,调用main函数。但是,它只完成一次(第一次)。它在第二次不起作用。第一次 ctrl+c 时,将调用 main。但是,这只有效一次。第二次ctrl+c,main不会执行。

最佳答案

这就是信号在 UNIX 中的工作方式。当您通过按 ctrl + C 发送 SIGINT 时,将调用信号处理程序,即在您的情况下,调用 main 函数。但是当处理程序正在处理信号时,所有后续信号都将阻塞,直到处理程序返回。在您的情况下,处理程序永远不会返回。因此,在处理程序返回之前,您的程序无法对后续的 SIGINT 信号使用react。递归调用信号处理程序不是一个好主意,信号处理程序也不应该做太多的工作。它应该处理信号并尽快返回。

此外,请注意定义的宏名称(例如 SIGINT)应该用于比实际数字更好的可移植性。您可以使用 kill -ltrap -l 命令获取列表。

关于linux - UNIX 中的陷阱命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30976548/

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