Но я не уверен, что эта команда завершает процесс изящно. Достигает ли эта команда изящного завершения? Если это не так, как я могу изящно завершить процесс с его именем?
Я использую Ubuntu 10.04 LTS сервер x64 . Что это за демон?
Эонил
Это универсальный инструмент для запуска / остановки демонов и управления связанной информацией, такой как pid-файлы. Он присутствует в Ubuntu, смотрите его справочную страницу .
manatwork
Ответы:
19
Ваш вопрос не ясен, вы говорите о демоне в заголовке, но в теле говорите только о общем процессе.
Для демона есть определенные средства, чтобы остановить его, например, в Debian у вас есть
service daemon-name stop
или
/etc/init.d/daemon-name stop
Подобные синтаксисы существуют для других стандартов initscript, используемых в других дистрибутивах / ОС.
Чтобы убить процесс, не являющийся демоном, предположив, что он каким-то образом вышел из-под контроля, вы можете безопасно использовать killallили pkill, учитывая, что они используют по умолчанию SIGTERMсигнал (15), и любое прилично написанное приложение должно перехватить и корректно завершить работу при получении этого сигнала. , Примите во внимание, что эти утилиты могут убить более одного процесса, если есть много с одним и тем же именем.
Если это не сработает, вы можете попробовать SIGINT(2), затем SIGHUP(1) и в крайнем случае SIGKILL(9). Этот последний сигнал не может быть перехвачен приложением, поэтому он не может выполнить какую-либо очистку. По этой причине этого следует избегать каждый раз, когда вы можете.
Оба pkillи killallпринять параметр сигнала в виде -NAME, как в
Спасибо. На самом деле мой оригинальный вопрос был о markdoc serve &и svnserve -d. Я думаю, что это своего рода демон, но я ничего не
знал
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
Проверьте наличие killprocфункции в /etc/init.d/functionsскрипте, найдите файл и используйте функцию. Или используйте pgrepи pkillутилиты, чтобы проверить, работают ли они преднамеренно, а затем используйте их. Пример: pkill -SIGTERM mysqldотправит сигнал уничтожения TERM, чтобы mysqld выполнил безопасное завершение работы и сбросил базы данных на диск перед тем, как его убили.
Ответы:
Ваш вопрос не ясен, вы говорите о демоне в заголовке, но в теле говорите только о общем процессе.
Для демона есть определенные средства, чтобы остановить его, например, в Debian у вас есть
или
Подобные синтаксисы существуют для других стандартов initscript, используемых в других дистрибутивах / ОС.
Чтобы убить процесс, не являющийся демоном, предположив, что он каким-то образом вышел из-под контроля, вы можете безопасно использовать
killall
илиpkill
, учитывая, что они используют по умолчаниюSIGTERM
сигнал (15), и любое прилично написанное приложение должно перехватить и корректно завершить работу при получении этого сигнала. , Примите во внимание, что эти утилиты могут убить более одного процесса, если есть много с одним и тем же именем.Если это не сработает, вы можете попробовать
SIGINT
(2), затемSIGHUP
(1) и в крайнем случаеSIGKILL
(9). Этот последний сигнал не может быть перехвачен приложением, поэтому он не может выполнить какую-либо очистку. По этой причине этого следует избегать каждый раз, когда вы можете.Оба
pkill
иkillall
принять параметр сигнала в виде-NAME
, как висточник
markdoc serve &
иsvnserve -d
. Я думаю, что это своего рода демон, но я ничего неkillall
это убийца!В BSD-подобных и других дистрибутивах вы часто будете иметь скрипты в /etc/rc.d/, которые обычно управляют запуском, перезапуском и остановкой демонов в вашей системе. Чтобы остановить демон, вы должны вызвать скрипты с абсолютным путем, например:
или используйте команду:
Я настоятельно рекомендую попробовать этот скрипт для отображения ваших систем, запущенных и остановленных демонов:
источник
Проверьте наличие
killproc
функции в/etc/init.d/functions
скрипте, найдите файл и используйте функцию. Или используйтеpgrep
иpkill
утилиты, чтобы проверить, работают ли они преднамеренно, а затем используйте их. Пример:pkill -SIGTERM mysqld
отправит сигнал уничтожения TERM, чтобы mysqld выполнил безопасное завершение работы и сбросил базы данных на диск перед тем, как его убили.источник