killコマンドとかシグナルとかサービスの起動停止の話
killコマンドはプロセスを殺すの?
- 正確にはプロセスに対してシグナルを送信している
- killコマンドは引数指定しないデフォルトの状態だとTERMシグナル(正常終了)を送る
killコマンドはプロセスにシグナル(プロセスに要求する振る舞い)を送るコマンドだった
シグナルに関しては、詳しくはこちらのプロセスブックを参照ください
サービスなどはOS毎に起動停止の手段が用意されている
macの場合
- launchctlコマンドを使う
- /Library/LaunchDaemons/以下にある、サービス毎のplistというxmlファイルに対してloadやunloadで起動停止ができる
daemontoolsだと/Library/LaunchDaemons/
とかにplistが存在するので
plistの名前はdamonntoolsのinstall方法によって異なるかもしれないけど
$launchctl load /Library/LaunchDaemons/com.github.mxcl.homebrew.daemontools.plist $launchctl unload /Library/LaunchDaemons/com.github.mxcl.homebrew.daemontools.plist
みたいにやる。
詳しくはこのページとか見るといいかも
Linuxとか
- /etc/init.d/以下にサービス毎のshellで書かれたrcスクリプトというファイルを実行する事で起動停止操作ができる
nginxとかの場合
$/etc/init.d/nginx stop $/etc/init.d/nginx start
とかやって再起動させたりする
daemontoolsで起動してるサービスの起動停止
- svcコマンドという、オプションで指定したシグナルをいい感じにラッピングしてサービスに送ってくれるというのがdaemontoolsにはある
- オプションはdaemontoolsのドキュメントに詳しく書いてある
例えばdaemonntoolsでdaemonizeしてるjenkinsを再起動させたい場合は
svc -t /service/jenkins
とかTERMシグナルを送ってやればいい(daemonizeされているのでTERMシグナルで正常終了させても、すぐ起動し直すから問題無さそう)
けども、起動させたまま設定ファイルの更新を反映させたい場合は
svc -h /service/jenkins
とHUPシグナル送るのでもいいかも(起動したまま設定ファイルなどを読み込み直してくれる)
まとめ
出来ればkillコマンド使わないで済ませた方が良いかも
普通にkillコマンドを打つ時はps
コマンド打ったりしてPID調べて、
killコマンドに直打ちでPIDを指定してると思いますが、typoとかして重要なプロセスを終了させてしまったら怖い