トラップ機能をコメントアウトすると、なぜcontrol-cが機能するのですか?

トラップ機能をコメントアウトすると、なぜcontrol-cが機能するのですか?

rhel VMを起動した後、ログファイル(tail -f xyz.log)に従いますが、control-cを使用して終了できないことに気づきました。私はcontrol-zを試しましたが、バックグラウンドジョブを終了したので、プロセスを手動で終了する必要がありました(tail -f xyz.log)。

私たちの店の誰かが/ etc / profileのトラップ機能をコメントアウトするように言ったので、そうしました。

#trap "" 1 2 3 15

その後、ログアウトして再度シェル環境にログインすると、control-cが機能し始めます!

私は何が起こっているのか理解したいと思います。 <マントラップ>をしましたが、残念ながらその中に含まれた内容をうまく活用できませんでした。時間をかけてこの記事を読んでくれてありがとう。

ベストアンサー1

与えられたtrapコマンドはシェルに次の信号を傍受するように指示します。

1 SIGHUP
2 SIGINT
サム SIGQUIT
15SIGTERM

「」は、これらの信号のいずれかが受信されたときに実行されるコマンドです。つまり、何もしないで信号を完全に無視してください。

stty -aたとえば、この例の2番目の出力行を使用して、信号にバインドされている文字を確認できますstty(形式は使用しているシステムによって異なります)。

$ stty -a
speed 38400 baud; rows 40; columns 80; line = 0;
intr = ^C; quit = ^\; erase = ^H; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff
-iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke

一部の文字と信号の対応は次のとおりです。11.1.9 特殊文字、例えば、

  • intr送るSIGINT
  • quit送るSIGQUIT

だから私は^C送るSIGINT(あなたの構成は異なる場合があります)。

これをコメントアウトすると、trapシェルはデフォルトの動作に戻り、これらの特殊文字が入力されたときにシグナルを送信します(例:^\send)。SIGQUITそして^C送るSIGINT

追加資料:

おすすめ記事