System Management
キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 

シグナルについて

hiro_760329
アドバイザー

シグナルについて

お世話になっております。exitコマンドでのログオフや、シャットダウンコマンド実行時にユーザが受信するシグナルについてご教授いただきたく。

■背景

現在、ユーザが「0 1 3 15 25」のいずれかのシグナルを受信した場合、あるバッチファイルを実行するよう$home/.profileに定義しております。しかしながら、shutdownコマンド(shutdown -hy 0)実行時はどのシグナルも受信しなかったようで、バッチファイルが実行されることはありませんでした。

■問合せ内容

�当方としましては、shutdownコマンド実行時もバッチファイルを実行するよう

考えております。同コマンド実行時、ユーザはシステムよりどんなシグナルを受信するのか(または受信しないのか)ご教授願います。

�受信できない場合、shutdown時にバッチファイルを実行させる手段として何かアイデアがあればご教授願います。

例)rcに作りこむなど???・・・

1 件の返信
nadachi
レギュラーアドバイザー

シグナルについて

shutdown(1m) には、

* If the system is standalone, /sbin/rc is executed to shut down subsystems, unmount file systems, and perform other tasks to bring the system to run level 0.

とあります。/sbin/init.d の下には"killall" があり、中は、

'stop')

/usr/sbin/killall

set_return

;;

となっており、killall(1m)には

If no signal is specified, a default of 9 (kill) is used.

とありますから、この順で行けば、shutdownコマンドを実行すると、ある時点で killallコマンドが引数なしで実行されますので、生残っていたユーザープロセスにはsignal 9 が送られているはずです。

 この変更が良いことかどうか分かりませんが、一つのありえる方法は、/sbin/init.d/killallの'stop'の

部分を、例えば、

'stop')

/usr/sbin/killall -15 # added

sleep 10 # added

/usr/sbin/killall

set_return

;;

みたいにしたらどうか、と思います。

(ただしkillallは容赦なくシグナルを送りますから、

バッチファイルから実行されたコマンドにもタイミングによってはシグナルが来てしまうかも知れません。)

> 例)rcに作り込むなど ???

/sbin/rcから自動起動されるスクリプトを作るわけですね。こっちの方がきれいで確実だと思います。psのリストを得て、ttyにまだつながっているユーザープロセス,または、プロセス名でfilterしても良いでしょう, にsignal を送って、終わるのを待つ、というのを作り込むのが良いのでは。