今天我错误地运行了一个有趣的命令,看起来像 vi filename | 六 - . 即使 Ctrl-C 没用,它也让我的终端卡住了。我只需要关闭终端。我试了几次,也在我朋友的机器上试了试。只是想知道为什么 Ctrl-C 也无法提供帮助。
问问题
312 次
3 回答
3
vi正在从标准输入读取。
在vi中编辑时, Ctrl+c也不起作用。
要退出vi ,请使用:q或:q! 将像在正常的vi会话中一样工作。
于 2012-07-12T08:57:40.403 回答
1
使用 POSIX 函数 signal() 一个 C 程序可以选择如果有键盘中断要做什么。
这是一个例子(从这个网站复制):
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
FILE *temp_file;
void leave(int sig);
main() {
(void) signal(SIGINT, leave);
temp_file = fopen("tmp", "w");
for(;;) {
/*
* Do things....
*/
printf("Ready...\n");
(void)getchar();
}
/* cant get here ... */
exit(EXIT_SUCCESS);
}
/*
* on receipt of SIGINT, close tmp file
*/
void leave(int sig) {
fprintf(temp_file,"\nInterrupted..\n");
fclose(temp_file);
exit(sig);
}
但是正如你所看到的,vi 并没有使用键盘中断来退出。无论您是否在管道中使用它都没有关系。
于 2012-07-12T09:10:51.893 回答
0
Vi 拦截ctrl-c
(它几乎等同于esc
),因此ctrl-c
在该设置中退出应用程序将不起作用。
ctrl-z
我可以通过使用然后使用来逃离那个陷阱kill %
于 2012-07-12T16:46:10.817 回答