デーモンをその名前で優雅に殺す方法は?


16

私は通常、プロセスをで殺しますkillall

killall markdoc

しかし、このコマンドがプロセスを正常に終了するかどうかはわかりません。このコマンドはグレースフルターミネーションを達成しますか?そうでない場合、その名前のプロセスを正常に終了するにはどうすればよいですか?


ディストリビューションにはstart-stop-daemonがありますか?
マナトワーク

Ubuntu 10.04 LTSサーバーx64を使用しています。そのデーモンは何ですか?
エオニル

これは、デーモンを開始/停止し、pidファイルなどの関連情報を管理するための汎用ツールです。Ubuntuにあります。man ページを参照してください
マナトワーク

回答:


19

あなたの質問は明確ではありません。タイトルでデーモンについて話しますが、本文では一般的なプロセスについてのみ話します。

デーモンには、それを停止する特定の手段があります。例えば、Debianには

    service daemon-name stop

または

    /etc/init.d/daemon-name stop

他のディストリビューション/ OSで使用される他のinitscript標準にも同様の構文が存在します。

デーモン以外のプロセスを強制終了するには、何らかの方法で制御不能であると仮定すると、デフォルトで(15)シグナルを使用し、このシグナルを受信すると適切に作成されたアプリケーションがキャッチして正常に終了するkillall場合pkill、安全にor を使用できますSIGTERM。同じ名前のプロセスが多数ある場合、これらのユーティリティが複数のプロセスを強制終了する可能性があることを考慮してください。

それがうまくいかない場合は、SIGINT(2)、SIGHUP(1)、最後の手段としてSIGKILL(9)を試すことができます。この最後の信号はアプリケーションによってキャッチできないため、クリーンアップを実行できません。このため、できる限り回避する必要があります。

両方pkillkillall形で信号パラメータを受け入れる-NAMEと、

pkill -INT process-name

ありがとうございました。実は、私の元の質問には、約だったmarkdoc serve &svnserve -d。それは一種のデーモンだと思いますが、私には何も確かではありませんでした:)
Eonil

killallキラーです!
xdevs23

3

BSDライクなディストリビューションやその他のディストリビューションでは、通常、システムのデーモンの起動、再起動、停止を管理するスクリプトが/etc/rc.d/にあります。デーモンを停止するには、絶対パスでスクリプトを呼び出します。例:

# /etc/rc.d/acpid stop

または、次のコマンドを使用します。

# rc.d stop acpid

デーモンを開始および停止したシステムを表示するために、このスクリプトを試してみることを強くお勧めします。

#!/bin/bash

chk_status(){
  target=$1
  if [[ $target != "functions" && $target !=  "functions.d" ]]
  then
    if [[ -f "/var/run/daemons/$target" ]]
     then
       stat="\e[1;32m[RUNNING]"
     else
       stat="\e[1;31m[STOPPED]"
     fi

    printf "$stat \t\e[1;34m$target\e[0;0m\n"
  fi
}

daemons=($(for daemon in /etc/rc.d/*; do echo "${daemon#\/etc\/rc.d\/}"; done))

if [[ $1 != "" ]]
then
 chk_status $1
else
 for d in "${daemons[@]}"; do
   chk_status $d
 done | sort
fi

0

スクリプトでkillproc使用可能な関数を確認し/etc/init.d/functions、ファイルを入手して関数を使用します。またはpgreppkillユーティリティを使用して、意図的に機能しているかどうかを確認してから使用します。例: pkill -SIGTERM mysqld強制終了する前に、mysqldに安全なシャットダウンを実行させ、データベースをディスクにフラッシュするためにTERM killシグナルを送信します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.