web-dev-qa-db-ja.com

キーボードショートカットを使用したSIGTERM

ターミナルの中で Ctrl+C キーボードショートカットは、現在のフォアグラウンドプロセスにSIGINTシグナルを送信します。現在のプロセスにSIGTERMまたはSIGKILLを送信するためのキーボードショートカットを設定する方法はありますか?時間の節約になると思います。

私は実行していますUbuntu 11.04

44
julkiewicz

sttyがこれを制御する責任があります。すでに1つの設定を持っている可能性があります。次のようにして確認できます。

$ 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      

最後の数行は見慣れたものに見えるはずです。^ C = intrは、あなたが質問で述べたものです。詳細は次の方法で確認できます。

$ man stty
25
polynomial

ターミナルの中で Ctrl+C キーボードショートカットは、SIGINTシグナルを現在のフォアグラウンドプロセスに送信します。

あなたの知識は2つの点で間違っています:

  1. シグナルはフォアグラウンドに送信されますプロセスグループ
  2. それはただ CTRL+C それがその時にたまたま設定された特殊文字である場合。 (これはほとんどの最新システムのデフォルトですが、歴史的にはDEL文字または何か他の文字であった可能性があります。)

SIGTERMまたはSIGKILLを現在のプロセスに送信するためのキーボードショートカットを設定する方法はありますか?

いいえ。ライン規律は送信される信号を制御し、それらの信号はハードワイヤードされています。それらは(標準Unixでは)SIGHUPSIGINTSIGTTOUSIGTTINSIGQUIT、およびSIGTSTPです。 。回線分野によって生成される他のものはありません。

17
JdeBP

Ttyで利用可能なシグナルのセットはSIGINTCtrl+C)、SIGTSTPCtrl+Z)とSIGQUITCtrl+\)。それらに異なる文字を割り当てることができますが、それらが利用可能な唯一の信号です。あなたの目的のためにあなたが使うことができるかもしれません Ctrl+\SIGQUITを送信します。ただし、エラーのように動作し、デフォルトでコアダンプが発生します。 sttyコマンドを使用して、設定を表示および変更できます。

14
Chris Page

stty -a を使用してキーバインディングを編集できますが、プロセスと対話するSIGTERMまたはSIGKILLキーバインディングを作成することはできません。

それについてもっと読む ここ

0
Josh Correia