0

今天我错误地运行了一个有趣的命令,看起来像 vi filename | 六 - . 即使 Ctrl-C 没用,它也让我的终端卡住了。我只需要关闭终端。我试了几次,也在我朋友的机器上试了试。只是想知道为什么 Ctrl-C 也无法提供帮助。

4

3 回答 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 回答