2011-07-20 23 views
40

Trên Linux/Unix có các tín hiệu. CtrlC một (SIGINT) là hiển nhiên đối với tôi. Hiện tại, trong một số ứng dụng khác có các tín hiệu qua CtrlX?! Có phải đó là một tín hiệu hay nó tạo ra một chuỗi thoát? Có điều gì khác tôi có thể sử dụng như là một cái gì đó tương tự như CtrlC (CtrlV, CtrlX ...)?Tín hiệu nào ctrl-x gửi khi được sử dụng trong thiết bị đầu cuối?

Nếu có ai có manh mối, hãy làm quen với C hơn là bash, nhưng câu trả lời bằng cả hai ngôn ngữ đều được đánh giá cao!

+1

Có lẽ không phải là một danh sách đầy đủ: [http://www.cdrinfo.com/Sections/Reviews/Specific.aspx?ArticleId=19672](http://www.cdrinfo. com/Phần/Nhận xét/Specific.aspx? ArticleId = 19672) – marto

Trả lời

73

Để có được tất cả các thiết bị đầu cuối tập ký tự điều khiển:

stty -a 
49

Có thể có sự hiểu lầm. CtrlC không tạo ra tín hiệu. Hoàn toàn có thể nhấn CtrlC ở bất kỳ đâu và không có điều xấu xảy ra (ví dụ: trong mọi trình soạn thảo văn bản hoặc trình xử lý văn bản, đó là tiêu chuẩn thực tế để "sao chép").

Tuy nhiên, khi bạn chạy chương trình trong vỏ, sau đó nhấn phím của bạn thực sự đi vào trình bao, chứ không phải trong chương trình của bạn. Shell sẽ chuyển tiếp (gần như) mọi thứ vào stdin của chương trình của bạn và chuyển tiếp bất kỳ thứ gì đến từ thiết bị đầu cuối tới một trong hai thiết bị đầu cuối hoặc một quá trình khác hoặc một tệp (nếu bạn sử dụng một đường ống hoặc chuyển hướng).

Nếu vỏ thấy bạn nhấn Ctrl C, sau đó vỏ sẽ gửi tín hiệu ngắt. Nhưng đó thực sự chỉ là một cái gì đó mà vỏ, không phải cái gì đó kỳ diệu xảy ra vì sự kết hợp quan trọng.

Về CtrlX, bạn có thể có nghĩa là CtrlZ. Điều này ngăn chặn một quá trình, và vỏ kết quả đầu ra một số mà bạn có thể sử dụng với fg để làm cho nó chạy một lần nữa.

+5

Ctrl-C khiến SIGINT được gửi, chứ không phải SIGTERM. Ngoài ra, đó là thiết bị đầu cuối, không phải vỏ, sẽ gửi SIGINT khi kết hợp ngắt được nhấn (xem cờ 'BRKINT'). Tôi nghĩ rằng bạn đang đúng về Ctrl-C đang được dịch bởi vỏ. –

+0

Cái xấu của tôi, tất nhiên ... nếu nó là SIGTERM, bạn không thể chặn (hoặc xử lý) nó, mà bạn có thể, rõ ràng. – Damon

+1

Tôi biết thực tế là ctrl-C không phải là tín hiệu. Nếu tôi viết ra điều đó thì không ai có thể hiểu được câu hỏi, và nó quá đơn giản để viết về rất nhiều điều kỳ lạ. – imacake

14

Thiết bị đầu cuối chỉ định ý nghĩa đặc biệt cho một số chuỗi khóa nhất định. Này bao gồm xóa một nhân vật, xóa khi bắt đầu dòng (CtrlU), ...

Cụ thể, khi nhà ga ISIG chế độ địa phương được kích hoạt:

  • VINTR (thường CtrlC) tạo ra một SIGINT (bị gián đoạn bởi người dùng).
  • VQUIT (thường Ctrl\) tạo ra một SIGQUIT (như SIGINT, mà còn đổ lõi).
  • VSUSP (thường là CtrlZ) tạo ra SIGTSTP (dừng bằng thiết bị đầu cuối I/O).
  • VDSUSP (trên một số hệ thống, không phải trên Linux) tạo ra một SIGTSTP khi chương trình cố đọc nó.

Ở trên có thể định cấu hình. Đây là tài liệu trên trang man termios(3).

7

Từ Wikipedia

CtrlxCtrle: Chỉnh sửa các dòng hiện trong chương trình $ EDITOR hoặc vi nếu không xác định.

CtrlxCtrlr: Đọc trong các nội dung của tập tin inputrc, và kết hợp bất kỳ ràng buộc hoặc các bài tập biến tìm thấy ở đó.

CtrlxCtrlu: undo Incremental, riêng biệt nhớ cho mỗi dòng.

CtrlxCtrlv: Hiển thị phiên bản thông tin về các trường hợp hiện tại của bash.

CtrlxCtrlx: phụ khuyết con trỏ với vị trí cũ của nó. (C-x, vì x có hình chữ thập).

Một sử dụng thêm Ctrlx là để mở rộng * khi gõ một lệnh trong shell.

Giả sử bạn có:

$ ls * 

Nhấn Ctrlx và sau đó * sẽ mở rộng * tất cả các mục trong thư mục hiện một cái gì đó như thế này:

$ ls dir1 dir2 file1 file2 file3` 

Bạn cũng có thể tham khảo this topic on SuperUser để biết cách sử dụng tôi đã mô tả ở trên.

4

Trên Linux/Unix có các tín hiệu. Các Ctrl +C một (SIGINT) là hiển nhiên đối với tôi ...

Nếu bạn cần một danh sách các tín hiệu có sẵn trên hệ thống của bạn, sau đó signum.h có thể hữu ích. Dưới đây là từ 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())