キーバインディングを使用して端末エミュレータの現在のプロセスにKILL信号を送信できますか?

キーバインディングを使用して端末エミュレータの現在のプロセスにKILL信号を送信できますか?

Bash端末エミュレータは、それぞれを介してプロセスに送信できますSIGINTSIGSTOP SIGTSTPC-cC-z(1) (2)

両方の信号()を無視するプロセスはありますかtmux wait-for hello? PIDを照会し、キーバインディング(send経由などSIGKILL)を介してシグナルを送信せずにこのプロセスを終了する簡単な方法はありますか?

答え1

この仮定は正しくありません。これらのキーの組み合わせは、シェルではなく端末(エミュレータ)によって解釈されます。シェルはそれらを見ることができません。

を使用してフォアグラウンドプロセスを停止して^Zから実行できますkill -KILL %%。おそらく、キーバインディングを使用して2番目の部分を実行できます。

答え2

SIGINT/SIGQUIT/SIGTSTP の送信は、端末エミュレータではなく、カーネルの端末または擬似端末デバイスドライバです。

たとえば、シリアル接続を介して端末から文字(バイト)を受信した場合、または疑似端末のマスター側の端末エミュレータから文字(バイト)を受信したときに、カーネルがプロセスのすべてのプロセスにSIGINT信号を送信するように構成されているとします。stty intr '^C'します。^C0x3フォアグラウンドプロセスグループttyデバイス(そして、特定の時間にどのプロセスグループが前景であるかを決定するのは対話型シェルです)。

少なくともLinuxには、フォアグラウンドプロセスグループに送信されるSIGKILL信号に文字をマッピングするための等価なターミナルドライバ(termios)設定はありません。

ターミナルエミュレータは、xtermSIGKILLを含むいくつかの信号とsend-signal(kill)特定のX11イベント(KeyPressイベントなど)のアクションを送信するように設定できます。

xterm -xrm 'XTerm.VT100.translations: #override Ctrl <Key>k: send-signal(kill)'

たとえば、xterm+にSIGKILLを送信するプログラムが起動します。Ctrlk

+ MouseButton1を使用すると、メインメニューCtrl項目でも同じことができますSend KILL Signal

ただし、スレーブ端末デバイスの前景プロセスグループではなく、通常はシェルを実行するために独自に作成するプロセスグループに送信されます。だからおそらくあなたが望むようにはなりません。

ターミナルエミュレータがSIGKILLをフォアグラウンドプロセスグループに送信する方法を見つけたとしても、まずプロセスが別のuidで実行されている場合、それを行うことはできず、何もしません。たとえば、Aがssh//...の後にフォアグラウンドプロセスグループにシグナルを送信する必要があるため、セッションが開始されます。scriptscreen彼ら端末機器

答え3

GUI端末エミュレータを使用している場合は、SIGKILLを送信する可能性が高くなります。そのメニューを確認してください。私はKonsoleを使用していますが、編集メニューにSIGKILLなどの信号を送信できる「信号を送信」サブメニューがあります。

関連情報