答案1
管道符号将命令的输出发送nano
到命令的输入uniq
。
但是,nano
仍在运行并接收您的键盘输入。只是您看不到它的输出,因为uniq
在看到文件结尾之前不会输出它的结果(这对问题并不重要)。
当你按下时ctrl-c
它会被纳米‘捕获’,但不会导致它退出。
退出nano的方法是按ctrl-x
,但是nano
如果进行了修改,例如,如果您在输入后按过任何其他键,则不会退出。在这种情况下,nano 将提示您以下内容:
Save modified buffer (ANSWERING "No" WILL DESTROY CHANGES) ?
Y Yes
N No ^C Cancel
按“n”键将退出而不保存更改。
您可能在意识到自己处于 Nano 状态之前按下了几个组合键,在这种情况下,您可能会深入几个菜单。值得庆幸的是,在 nano 中按下ctrl-x
也会从大多数菜单中退出(但不会取消上述提示),这意味着ctrl-x
多次按下永远不会让您远离退出。
如果你被一些菜单“困住”,你通常可以通过按ctrl-x
几次,然后按n
键。 如果这不起作用,则意味着您按了ctrl-x
太多次 - 只需按ctrl-x
一更多的时间,然后是n
钥匙——这总是有效的。
答案2
正如其他答案已经解释的那样,Ctrl+C不会杀死 Nano,因为 的输入nano
仍然来自终端,并且终端仍然是nano
控制终端,因此 Nano 将终端置于原始模式,其中Ctrl+C等控制字符传输到程序并且不被终端拦截以产生信号。
当被终端拦截时,Ctrl+C生成一个信号情报信号。如果您知道进程 ID (可以使用(Linux语法)或其他进程列表实用程序nano
找到),则可以发送此信号,其中 12345 是 PID。然而,SIGINT 传统上意味着“返回主循环”,Nano 在收到 SIGINT 时并不退出。相反,发送ps u -C nano
ps
pgrep nano
kill -INT 12345
信号术语,这意味着“优雅地终止”;这是默认信号,因此您可以运行kill 12345
.另一种可能性是kill -HUP 12345
;叹息意思是“你不再拥有终端,优雅地退出,除非你可以没有终端”。如果所有其他方法均失败,请发送信号杀死(kill -KILL 12345
,或著名的kill -9 12345
),无论程序是否想死,它都会杀死程序。
许多程序,包括 Nano,都识别Ctrl+Z来暂停。这与发送的序列相同信号传输协议信号。如果程序识别出此控制键,您将收到 shell 提示符,并且由于该程序成为后台作业,因此您可以轻松地终止它kill %%
(这会向最后放入后台的作业发送信号)。
有了纳米,就有了另一种方式:向其发送退出键序列,即Ctrl+ X,如有必要,后跟N“不保存”。但总的来说,请记住这一点:
- 尝试Ctrl+Z后跟
kill %%
,如果这不会终止程序kill -9 %%
。 - 如果Ctrl+Z不起作用,请切换到另一个终端,找出进程 ID(您可以用来
ps -t pts/42
列出终端上运行的进程/dev/pts/42
)并终止它。
答案3
外壳不会接收你Ctrl+C
,nano
是的。程序能够定义中断信号的自定义行为,nano
就是这样的程序之一。要查看在没有重定向的情况下打开的自定义行为nano
并向其发送Ctrl+C
.
答案4
打击Ctrl
+ X
.
Nano 捕获所有键盘输入,Nano Ctrl
+内部的C
含义与 shell 中完全不同。如果您在单独的窗口中运行nano
,您可以轻松查看必须输入哪些键才能退出。Ctrl
+X