Ctrl-Cはbashのルートでログアウトをトリガーします。

Ctrl-Cはbashのルートでログアウトをトリガーします。

この特定のサーバーで非常に残念な問題に直面しました。ctrl+を押すたびに、cルートセッションからログアウトされます。


CentOS Linux バージョン 7.3.1611 および Bash (4.2.46-21.el7_3.x86_64) の実行

[root@server ~]# uname -a  
Linux server 3.10.0-514.16.1.el7.x86_64 #1 SMP Wed Apr 12 15:04:24 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux  
[root@server ~]# ^C   
[root@server ~]# logout
[user@server ~]$   

答え1

BashでCtrl-CをキャプチャするCTRL+をキャプチャしCて特定のアクションをトリガーする方法を説明します。強制的に同様のトラップを実行している場合は、アカウント(など)
を確認してください。rootbashrcログアウトCTRL+を押すとC

Bashでctrl-cをキャプチャ

組み込みトラップを使用すると、Bashスクリプトの実行中にユーザーがctrl-cを押す状況を処理できます。たとえば、いくつかのクリーニング機能を実行する必要がある場合です。

#!/bin/bash

# trap ctrl-c and call ctrl_c()
trap ctrl_c INT

function ctrl_c() {
        echo "** Trapped CTRL-C"
}

for i in `seq 1 5`; do
    sleep 1
    echo -n "."
done

答え2

あなたのbash環境が実際にbashを実行しているbashラッパーではないことを確認できます。

私たちはSSHを使用して行われたすべてのタスクを追跡する同様のソリューションを職場で使用しますが、問題はctrl + cが含まれるたびにシェルを終了するのとまったく同じです。

答え3

すべてのオペレーティングシステムで処理する必要がある信号を見つけることができます。シグナルに対する3つの反応がある。 1-無視、2-直接処理、3-オペレーティングシステムに任せます。 Ctrl+C はデフォルトでは破棄信号です。コマンドを使用してtrap信号を処理します。また、システムのASCII規格を確認してください。一部のエンコーディングは異なる場合があります。man asciiHUPマークとそれが属するテナントを確認してください。 Trapコマンド例: trap "echo hi" SIGINTCtrl + Cを押すたびにhiが印刷されます。コマンドを使用して信号のリストを見つけることもできますkill -l

関連情報