最近、私たちが設定したいくつかのクラウドサーバーは基本的に信号を無視しているようです。この動作を引き起こす設定が何であるかを知ることができます。これは、シグナルキャプチャにctrl
依存する+スクリプトとbashスクリプトの両方に影響します。c
これは、sleepコマンドを使用して、この環境(数年前に設定されている)で動作しているサーバーを影響を受けるサーバーの1つと比較して実証できます。
[email protected] ~ $ sleep 300 &
[1] 9554
[email protected] ~ $ cat /proc/9554/status
Name: sleep
Umask: 0002
State: S (sleeping)
Tgid: 9554
<snip /> ...
SigQ: 0/63430
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000000000000
SigCgt: 0000000000000000
<snip /> ...
[email protected] ~ $ kill -s SIGINT 9554
[email protected] ~ $
[email protected] ~ $
[1]+ Interrupt sleep 300
[email protected] ~ $ ps aux | grep [s]leep
クラウド仮想マシンのいずれかで同じコマンドを実行すると、次のようになります。
[email protected] ~ $ sleep 300 &
[1] 2199
[email protected] ~ $ cat /proc/2199/status
Name: sleep
Umask: 0002
State: S (sleeping)
Tgid: 2199
Ngid: 0
Pid: 2199
<snip /> ...
SigQ: 0/482668
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000000000006 <-- note the Signal Ignore flag are set
SigCgt: 0000000000000000
<snip /> ...
[email protected] ~ $ kill -s SIGINT 2199
[email protected] ~ $ ps aux | grep [s]leep
me 2199 0.0 0.0 107952 360 pts/1 S 16:35 0:00 sleep 300
[email protected] ~ $ sudo kill -s SIGINT 2199
[email protected] ~ $ ps aux | grep [s]leep
me 2199 0.0 0.0 107952 360 pts/1 S 16:35 0:00 sleep 300
[email protected] ~ $ sudo kill -s SIGKILL 2199
[1]+ Killed sleep 300
最初は私のptyに影響を与えるSSHの問題だと思いました。U&Lの問題実行中のプロセスの状態を調べると、サーバーが実行中のすべてのプロセスを開始しているように見え、デフォルトのシグナルセットを無視していることがわかりました。
開始するすべてのプロセスに対してブロッキング信号を設定する方法を詳しく説明する場所が見つかりません。このようなことを経験した人はいますか?
答え1
同様の問題が発生した場合、この特別なケースでは、これらのクラウドサーバーにイメージの一部としてインストールされたRuby仮想マシンv1.27.4のバグが原因で発生しました。
RVMのバグは、SIGINTをキャプチャするがクリーンアップ時に解放しない一般的な機能(cdなど)をオーバーライドするスクリプトです。詳細はこちらからご覧いただけます。Ruby RVMエラー
この場合、回避策はRVMを最新の安定版(この場合は1.29.7)に更新することです。
curl -sSL https://get.rvm.io | bash -s stable --ruby
mosvyのヒントに感謝します。