在终端中使用时,ctrl-x会发送哪个信号?

时间:2011-07-20 15:17:13

标签: linux bash signals signal-handling ctrl

在Linux / Unix上有信号。 Ctrl C 一个(SIGINT)对我来说是显而易见的。 现在,在其他一些应用程序中,有信号通过 Ctrl X ?! 这甚至是信号还是产生逃逸序列? 还有什么我可以使用类似于 Ctrl C Ctrl V Ctrl < / kbd> X ...)?

如果有人有线索,我对C语言的熟悉程度超过bash,但我们对这两种语言的答案表示赞赏!

5 个答案:

答案 0 :(得分:74)

获取所有终端控制字符分配:

stty -a

答案 1 :(得分:50)

可能存在误解。 Ctrl C 不会生成信号。完全可以在任何地方按 Ctrl C ,并且不会发生任何不好的事情(例如在每个文本编辑器或文字处理器中,这是事实上的标准“复制“)。

但是,当您在shell 中运行程序时,您的按键实际上会进入shell,而不是进入您的程序。 shell将(几乎)所有内容转发到程序的stdin,并将来自stdout的任何内容转发到终端或其他进程或文件(如果使用管道或重定向)。

如果shell看到你按 Ctrl C ,那么 shell会发送中断信号。但这真的只是外壳所做的事情,而不是由于关键组合而神奇地发生的事情。

关于 Ctrl X ,您可能需要 Ctrl Z 。这会停止一个进程,shell会输出一个可以与fg一起使用的数字,以使其再次运行。

答案 2 :(得分:14)

终端为某些键序列赋予特殊含义。这包括删除字符,删除到行首( Ctrl U ),...

具体而言,启用终端ISIG本地模式时:

  • VINTR(通常 Ctrl C )生成SIGINT(由用户中断)。
  • VQUIT(通常 Ctrl \ )会生成SIGQUIT(如SIGINT,但也会转储核心)。
  • VSUSP(通常 Ctrl Z )生成SIGTSTP(终端I / O停止)。
  • VDSUSP(在某些系统上,而不是Linux上)在程序尝试读取时生成SIGTSTP

以上是可配置的。这在termios(3)联机帮助页上有记录。

答案 3 :(得分:11)

来自Wikipedia

  

Ctrl x Ctrl e :编辑$ EDITOR程序中的当前行,或者vi   如果未定义。

     

Ctrl x Ctrl r :读入inputrc文件的内容,   合并在那里找到的任何绑定或变量赋值。

     

Ctrl x Ctrl u :增量撤消,分别记住每一行。

     

Ctrl x Ctrl v :显示有关当前实例的版本信息   bash。

     

Ctrl x Ctrl x :将光标替换为旧位置。 (C-X,   因为x有交叉形状。)

Ctrl x 的另一个用法是在shell中键入命令时展开*

说你有:

$ ls *

Ctrl x 然后 * *展开到当前目录中的所有项目,如下所示:< / p>

$ ls dir1 dir2 file1 file2 file3`

您也可以参考this topic on SuperUser了解我上面描述的用法。

答案 4 :(得分:5)

  

在Linux / Unix上有信号。 Ctrl + C 一个(SIGINT)对我来说很明显......

如果您需要系统上可用的信号列表,那么signum.h可能会有所帮助。以下是Debian 7.3:

/* Signals.  */
#define SIGHUP      1   /* Hangup (POSIX).  */
#define SIGINT      2   /* Interrupt (ANSI).  */
#define SIGQUIT     3   /* Quit (POSIX).  */
#define SIGILL      4   /* Illegal instruction (ANSI).  */
#define SIGTRAP     5   /* Trace trap (POSIX).  */
#define SIGABRT     6   /* Abort (ANSI).  */
#define SIGIOT      6   /* IOT trap (4.2 BSD).  */
#define SIGBUS      7   /* BUS error (4.2 BSD).  */
#define SIGFPE      8   /* Floating-point exception (ANSI).  */
#define SIGKILL     9   /* Kill, unblockable (POSIX).  */
#define SIGUSR1     10  /* User-defined signal 1 (POSIX).  */
#define SIGSEGV     11  /* Segmentation violation (ANSI).  */
#define SIGUSR2     12  /* User-defined signal 2 (POSIX).  */
#define SIGPIPE     13  /* Broken pipe (POSIX).  */
#define SIGALRM     14  /* Alarm clock (POSIX).  */
#define SIGTERM     15  /* Termination (ANSI).  */
#define SIGSTKFLT   16  /* Stack fault.  */
#define SIGCLD      SIGCHLD /* Same as SIGCHLD (System V).  */
#define SIGCHLD     17  /* Child status has changed (POSIX).  */
#define SIGCONT     18  /* Continue (POSIX).  */
#define SIGSTOP     19  /* Stop, unblockable (POSIX).  */
#define SIGTSTP     20  /* Keyboard stop (POSIX).  */
#define SIGTTIN     21  /* Background read from tty (POSIX).  */
#define SIGTTOU     22  /* Background write to tty (POSIX).  */
#define SIGURG      23  /* Urgent condition on socket (4.2 BSD).  */
#define SIGXCPU     24  /* CPU limit exceeded (4.2 BSD).  */
#define SIGXFSZ     25  /* File size limit exceeded (4.2 BSD).  */
#define SIGVTALRM   26  /* Virtual alarm clock (4.2 BSD).  */
#define SIGPROF     27  /* Profiling alarm clock (4.2 BSD).  */
#define SIGWINCH    28  /* Window size change (4.3 BSD, Sun).  */
#define SIGPOLL     SIGIO   /* Pollable event occurred (System V).  */
#define SIGIO       29  /* I/O now possible (4.2 BSD).  */
#define SIGPWR      30  /* Power failure restart (System V).  */
#define SIGSYS      31  /* Bad system call.  */
#define SIGUNUSED   31

#define _NSIG       65  /* Biggest signal number + 1
                   (including real-time signals).  */

#define SIGRTMIN        (__libc_current_sigrtmin ())
#define SIGRTMAX        (__libc_current_sigrtmax ())