bc
我最近 正在使用该实用程序,并且Ctrl+C不能用于退出该程序。Ctrl+C的interrupt
信号返回消息use quit to exit.
我可以使用EOF
(Ctrl+ D)或quit
退出。
^Z
我读了和之间的区别^C
。从技术上讲,^C
应该结束程序(大多数程序在收到信号时都会中止interrupt
)。但bc
返回一条消息,要求我们使用quit
。
我想知道这有什么特别的优势吗?
答案1
Ctrl+C发送 SIGINT (信号整数爆发(erupt)会使进程中断(换句话说,它会杀死进程)。有些程序可以捕获此信号并忽略它,这就是 的情况bc
。
Ctrl+字符D 发送 EOT(传输结束)字符。接收此信号的效果与程序读取文件并到达文件末尾的效果类似。实际上,它bc
正在等待您告诉它您没有更多输入了。
至于为什么...程序如何退出以及如何与用户交互,则由开发人员来指定
答案2
我想知道这有什么特别的优势吗?
是的。如果您在 bc 中调用一个长时间运行的函数,则可以使用 control+c 来中断它,它不会退出 bc 本身,而是退出 bc 内部运行的函数。
下面是我这样做的一个例子:
$ bc twins.b
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
typing 'twins (10)' will print all twin primes less than 10.
twins(10000000)
^C
Runtime error (func=primes, adr=113): interrupted execution
Interruption completed.
print "As you can see, bc is still running\n"
As you can see, bc is still running
5+7
12
如果你想看看双胞胎的功能,下载 bc 源代码,并查看示例目录。
答案3
脚本或应用程序可以捕获和阻止事件,因此本质上提供了终止方法。开发人员为什么要这样做,你需要问问自己。
您可以在以下 shell 脚本中看到一个简单的示例:
# Call trapint function when recive SIGINT
trap trapint SIGINT
# trapint function:
function trapint {
echo "*** SIGINT received ***" # Print a message
exit 0 # Exit gracefully
}