system management
1753521 メンバー
4948 オンライン
108795 解決策
新規ポスト

シグナルについて

 
hiro_760329
アドバイザー

シグナルについて

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

■背景

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

■問合せ内容

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

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

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

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

1件の返信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 を送って、終わるのを待つ、というのを作り込むのが良いのでは。