如何发出 stdin 输入结束信号

如何发出 stdin 输入结束信号
  1. 在 Bash 中,我了解到可以通过此处文档更改结束信号。但默认情况下如何发出输入结束信号stdin
  2. 我碰巧发现使用catchardet,它们的输入可以用+stdin表示完成。但我似乎记得+和+类似于结束正在运行的命令的执行。那我错了吗?CtrlDCtrlDCtrlC

答案1

Ctrl+D,当在终端上的行开头键入时,表示输入的结束。这不是一个信号在unix意义上:当应用程序从终端读取并且用户按下 时Ctrl+D,应用程序会收到通知,已到达文件末尾(就像从文件读取并传递了最后一个字节一样)。

Ctrl+C确实发出信号,信号情报。默认情况下,SIGINT(中断信号)会杀死前台应用程序,但应用程序可以捕获该信号并以某种不同的方式做出反应(例如,shell 本身捕获该信号并中止您已经开始键入的行,但它不会这样做) t 退出,它会显示新的提示并等待新的命令行)。

您可以使用以下命令更改与文件结尾和 SIGINT 关联的字符stty命令,例如stty eof a将生成a文件结束字符,并stty intr ^-禁用 SIGINT 字符。这很少有用。

答案2

你的第二点将两种完全不同的事物混为一谈。

  • Ctrl+C 向正在运行的进程发送终止信号。
  • Ctrl+D 发送传输结束特点。

您正在寻找后者。

答案3

我在搜索其他信息时遇到了这个问题。提供的答案是正确的,但我认为太涉及内部运作了。

简单的、非技术性的答案是Ctrl+D终止 STDIN 文件并且Ctrl+C终止活动的应用程序。

两者都在键盘驱动程序中处理,并适用于从键盘读取的所有程序。

要查看差异,请启动命令行 shell 并输入wc不带参数的命令。现在正在等待 STDIN 输入。输入一个句子并“返回”。现在输入Ctrl+D即可wc完成并给出行数、字数和字符数。

做同样的事情,但输入Ctrl+ C。 wc 将终止且没有输出。

相关内容