2011-07-20 22 views
40

在Linux/Unix上有信号。 CtrlC one(SIGINT)对我来说很明显。 现在,在其他一些应用程序中有信号通过CtrlX?! 即使是一个信号,或者它是否会产生一个转义序列? 有什么事我可以类似于按CtrlÇ使用的东西(按CtrlV按CtrlX ......)?ctrl-x在终端中使用时发送哪个信号?

如果有人有线索,我不仅熟悉C语言,而且还赞赏这两种语言的答案!

+1

也许不是一个完整的列表:[http://www.cdrinfo.com/Sections/Reviews/Specific.aspx?ArticleId=19672](http://www.cdrinfo。 com/Sections/Reviews/Specific.aspx?ArticleId = 19672) – marto

回答

73

为了让所有的终端控制字符分配:

stty -a 
49

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

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

如果shell看到你按下Ctrl键Ç,然后壳发出中断信号。但这实际上只是壳的作用,并非因为关键组合而奇迹般地发生。

关于按CtrlX,你可能是指按Ctrlž。这会停止一个进程,并且shell会输出一个可以与fg一起使用的编号,以使其再次运行。

+5

Ctrl-C导致SIGINT被发送,而不是SIGTERM。另外,当按下分隔符组合时,它是发送SIGINT的终端(不是shell)(参见BRKINT标志)。我认为你是正确的关于由shell翻译的Ctrl-C。 –

+0

我的不好,当然......如果是SIGTERM,你不能阻止(或处理)它,显然你可以。 – Damon

+1

我意识到ctrl-C不是信号。如果我在那里写出来的话,没有人能够理解这个问题,而且它太简单了,不会写很多奇特的东西。 – imacake

14

终端为特定的按键序列赋予特殊含义。这包括删除一个字符,删除到行的开始(Ctrl键Ù),...

具体地,当启用终端ISIG本地模式:

  • VINTR(通常Ctrl键C)生成SIGINT(被用户中断)。
  • VQUIT(通常Ctrl键\)生成SIGQUIT(如SIGINT,而且核心转储)。
  • VSUSP(通常Ctrl键Ž)生成SIGTSTP(由端子I/O停止)。
  • VDSUSP(在某些系统上,而不是在Linux上)在程序试图读取它时生成一个SIGTSTP

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

7

Wikipedia

按CtrlX按Ctrlè:编辑在$编辑器程序的当前行,或者如果未定义,则为。

Ctrl键XCtrl键- [R:阅读在inputrc中文件的内容,并合并 发现有任何绑定或可变分配。

Ctrl键XCtrl键û:增量撤消,分别记住每一行。

按CtrlX按Ctrlv:显示版本有关当前实例的bash的 信息。

Ctrl键XCtrl键X:候补光标与它的旧的位置。 (C-x, ,因为x具有交叉形状)。的

一个附加使用Ctrl键X是输入内容的一个外壳命令时扩大*

假设你有:

$ ls * 

Ctrl键X然后*将扩大*到当前目录下的所有项目是这样的:

$ ls dir1 dir2 file1 file2 file3` 

你也可以参考this topic on SuperUser以了解上述用法。

4

在Linux/Unix上有信号。该按Ctrl +Ç一个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())