p_chinのおっぱいブログ

UnityとPerlなど

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で起動してるサービスの起動停止

例えばdaemonntoolsでdaemonizeしてるjenkinsを再起動させたい場合は

svc -t /service/jenkins

とかTERMシグナルを送ってやればいい(daemonizeされているのでTERMシグナルで正常終了させても、すぐ起動し直すから問題無さそう)

けども、起動させたまま設定ファイルの更新を反映させたい場合は

svc -h /service/jenkins

とHUPシグナル送るのでもいいかも(起動したまま設定ファイルなどを読み込み直してくれる)

 

まとめ

出来ればkillコマンド使わないで済ませた方が良いかも

普通にkillコマンドを打つ時はpsコマンド打ったりしてPID調べて、

killコマンドに直打ちでPIDを指定してると思いますが、typoとかして重要なプロセスを終了させてしまったら怖い