私は通常、プロセスをで殺しますkillall
。
killall markdoc
しかし、このコマンドがプロセスを正常に終了するかどうかはわかりません。このコマンドはグレースフルターミネーションを達成しますか?そうでない場合、その名前のプロセスを正常に終了するにはどうすればよいですか?
私は通常、プロセスをで殺しますkillall
。
killall markdoc
しかし、このコマンドがプロセスを正常に終了するかどうかはわかりません。このコマンドはグレースフルターミネーションを達成しますか?そうでない場合、その名前のプロセスを正常に終了するにはどうすればよいですか?
回答:
あなたの質問は明確ではありません。タイトルでデーモンについて話しますが、本文では一般的なプロセスについてのみ話します。
デーモンには、それを停止する特定の手段があります。例えば、Debianには
service daemon-name stop
または
/etc/init.d/daemon-name stop
他のディストリビューション/ OSで使用される他のinitscript標準にも同様の構文が存在します。
デーモン以外のプロセスを強制終了するには、何らかの方法で制御不能であると仮定すると、デフォルトで(15)シグナルを使用し、このシグナルを受信すると適切に作成されたアプリケーションがキャッチして正常に終了するkillall
場合pkill
、安全にor を使用できますSIGTERM
。同じ名前のプロセスが多数ある場合、これらのユーティリティが複数のプロセスを強制終了する可能性があることを考慮してください。
それがうまくいかない場合は、SIGINT
(2)、SIGHUP
(1)、最後の手段としてSIGKILL
(9)を試すことができます。この最後の信号はアプリケーションによってキャッチできないため、クリーンアップを実行できません。このため、できる限り回避する必要があります。
両方pkill
とkillall
形で信号パラメータを受け入れる-NAME
と、
pkill -INT process-name
markdoc serve &
とsvnserve -d
。それは一種のデーモンだと思いますが、私には何も確かではありませんでした:)
killall
キラーです!
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