SIGTERM với một phím tắt


41

Tôi biết rằng bên trong một thiết bị đầu cuối, phím tắt Ctrl+ Cbàn phím sẽ gửi SIGINTtín hiệu đến quá trình tiền cảnh hiện tại. Có cách nào để thiết lập một phím tắt để gửi SIGTERMhoặc thậm chí SIGKILLcho quy trình hiện tại không? Tôi nghĩ rằng nó có thể giúp tôi tiết kiệm thời gian.

tôi đang chạy Ubuntu 11.04


Câu trả lời:


24

stty chịu trách nhiệm kiểm soát điều này, bạn có thể đã có một thiết lập. Bạn có thể kiểm tra bằng cách thực hiện:

$ stty -e
speed 38400 baud; 53 rows; 225 columns;
lflags: icanon isig iexten echo echoe echok echoke -echonl echoctl
        -echoprt -altwerase -noflsh -tostop -flusho pendin -nokerninfo
        -extproc
iflags: -istrip icrnl -inlcr -igncr ixon -ixoff -ixany imaxbel -iutf8
        -ignbrk brkint -inpck ignpar -parmrk
oflags: opost onlcr -oxtabs -onocr -onlret
cflags: cread cs8 -parenb -parodd -hupcl -clocal -cstopb -crtscts
        -dsrflow -dtrflow -mdmbuf
discard dsusp   eof     eol     eol2    erase   intr    kill    lnext   
^O      ^Y      ^D      <undef> <undef> ^?      ^C      ^U      ^V      
min     quit    reprint start   status  stop    susp    time    werase  
1       ^\      ^R      ^Q      ^@      ^S      ^Z      0       ^W      

Một vài dòng cuối cùng sẽ trông quen thuộc, ^ C = int là dòng bạn đã đề cập trong câu hỏi của mình. Bạn có thể đọc cách thiết lập thêm thông qua:

$ man stty

13
$ stty -eBSD , để sử dụng Ubuntu $ stty -a, để xem:intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D;
dukedave

1
Tôi quan tâm đến việc móc tín hiệu cho trạng thái, vì vậy tôi tự hỏi về tổ hợp phím 'trạng thái', "ctrl- @". Đó có phải là một tín hiệu?
Andrew Wolfe

1
Các phím tắt ^\ gửi SIGQUIT.
Ioannis Filippidis

17

Tôi biết rằng bên trong một thiết bị đầu cuối, phím tắt Ctrl+ Csẽ gửi tín hiệu SIGINT đến quy trình tiền cảnh hiện tại.

Kiến thức của bạn không chính xác ở hai điểm:

  1. Tín hiệu được gửi đến nhóm quá trình tiền cảnh .
  2. Nó chỉ CTRL+ Cnếu đó là ký tự đặc biệt được cấu hình tại thời điểm đó. (Đó là mặc định trên hầu hết các hệ thống hiện đại, nhưng trong lịch sử, nó có thể là DELnhân vật hoặc thứ gì khác.)

Có cách nào để thiết lập một phím tắt để gửi SIGTERM hoặc thậm chí SIGKILL cho quy trình hiện tại không?

Không. Kỷ luật dòng kiểm soát những tín hiệu nào được gửi và những tín hiệu đó được gắn kết. Họ là (trong một Unix chuẩn) SIGHUP, SIGINT, SIGTTOU, SIGTTIN, SIGQUIT, và SIGTSTP. Không có người khác được tạo ra bởi kỷ luật dòng.


13

Tập hợp các tín hiệu khả dụng cho một tty là SIGINT( Ctrl+ C), SIGTSTP( Ctrl+ Z) và SIGQUIT( Ctrl+ \). Bạn có thể gán các ký tự khác nhau cho chúng, nhưng đó là những tín hiệu duy nhất có sẵn. Đối với mục đích của bạn, bạn có thể sử dụng Ctrl+ \để gửi SIGQUIT, mặc dù nó hoạt động như một lỗi và gây ra kết xuất lõi theo mặc định. Bạn có thể sử dụng sttylệnh để xem và thay đổi cài đặt.


1
Tôi đã phải tìm kiếm rất lâu một cách đáng ngạc nhiên để tìm lại phím tắt Ctrl + \. Cảm ơn rất nhiều! Điều này rất hữu ích vì nó vẫn hoạt động khi quá trình không phản ứng với Ctrl + C.
luator
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.