0

今日、間違ってvi filename |のようなおかしなコマンドを実行してしまいました 。vi - . Ctrl-C が役に立たなくても、端末が動かなくなりました。ターミナルだけを閉じる必要がありました。私はそれを数回試し、友人のマシンでも試しました。なぜ Ctrl-C も役に立たなかったのか不思議です。

4

3 に答える 3

3

viはstdinから読み取っています。

vi で編集する場合、Ctrl+cも機能しません。

viを終了するには、 :qまたは:qを使用します。通常のviセッションと同じように機能します。

于 2012-07-12T08:57:40.403 に答える
1

C プログラムは、POSIX 関数 signal() を使用して、キーボード割り込みがあった場合に何をするかを選択できます。

以下に例を示します (このサイトからコピー):

#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 に答える