killproc и pidofproc в linux
У меня есть скрипт, который использует команды killproc и procofpid и отлично работает на 64-битном suse. Но когда я выполнил скрипт на 32bit redhat, я обнаружил, что вышеуказанные команды не существуют.
У меня нет 32-битных SUSE и 64-битных redhat-машин для тестирования моего сценария.
правильно ли я предполагаю, что на 64bit redhat должны быть доступны вышеуказанные команды? Или вышеуказанные команды специфичны для Suse и redhat?
спасибо
6 ответов
команды вряд ли будут портативный. На самом деле я впервые слышу о них, но я думаю, что ваша проблема - работать с процессом по имени, а не pid.
Регистрация man pgrep
или man pkill
- они немного более портативны. Они являются частью procps
пакета (где ps
и top
come from) и должен быть доступен во всех вариантах Linux. Они также доступны на Solaris.
killproc в редхат Энтерпрайз Линукс 5.4 в составе в /etc/инит.д/функций
Если вам нужно просто сделать
. / etc / init.д/функций
в вашем скрипте для загрузки функций оболочки, его, вероятно, в других версиях redhat, но это единственный, который я должен передать на данный момент
эти команды определена в рамках База Стандартов Linux (LSB), как отметил @AndreKR.
однако в некоторых системах, таких как Redhat (и, вероятно, SUSE), в зависимости от установленных пакетов эти функции могут не определяться в местоположении, указанном LSB, которое /lib/lsb/init-functions
. Скорее они определены внутри /etc/init.d/functions
. Кроме того, в некоторых версиях Redhat вариант /etc/init.d/functions
отсутствует определенная LSB функция start_daemon
. Если добавить следующий фрагмент в верхней части скрипта, он должен быть переносимым в большинстве дистрибутивов/установок:
if [[ -f /lib/lsb/init-functions ]]; then
. /lib/lsb/init-functions
elif [[ -f /etc/init.d/functions ]]; then
. /etc/init.d/functions
# Pretend to be LSB-compliant
function start_daemon() {
daemon $*
}
else
echo "Linux LSB init function script or Redhat /etc/init.d/functions is required for this script."
echo "See http://refspecs.linuxfoundation.org/LSB_4.1.0/LSB-Core-generic/LSB-Core-generic/iniscrptfunc.html"
exit 1
fi
те, которые используются в Ubuntu являются частью спецификации "Стандартная База Linux" и документированы здесь.
Я думаю, что эти команды являются спецификой distrib: я никогда не видел их раньше. killproc должен быть убить, но что procofpid делать?
в заголовке, который вы говорите о pidofproc, вы можете найти эту команду под pidof в большинстве ящиков linux.
у меня была та же проблема, что и у вас, он дал предупреждение:
pidof: неверные параметры в командной строке!
Я изменил
"killproc -d 10 $cmd"
to
"kill -9 \`pidof $cmd\`"