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\`"