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
。
追加資料:
- トラップ - トラップ信号(POSIXシェル内蔵)、注釈
もし行動null( "" ) の場合、シェルは指定された各条件が発生すると無視します。
- Kill - プロセスを終了するか、シグナルを送信します。(標準信号名とその値を表示するPOSIXもあります。)
- stty - 端末オプションの設定
- SIGINTは他の終了信号とどのような関係がありますか?