killproc и pidofproc в Linux - PullRequest
       18

killproc и pidofproc в Linux

8 голосов
/ 10 июня 2010

У меня есть скрипт, который использует команды killproc и procofpid и прекрасно работает на 64-битном suse. Но когда я выполнил скрипт на 32-битном Redhat, я обнаружил, что вышеперечисленные команды не существуют.

У меня нет 32-битной Suse и 64-битных машин redhat для тестирования моего скрипта.

Правильно ли мое предположение, что на 64-битном Redhat вышеупомянутые команды должны быть доступны? Или приведенные выше команды относятся только к Suse и redhat?

Спасибо

Ответы [ 6 ]

9 голосов
/ 26 июля 2011

killproc находится в Redhat Enterprise Linux 5.4 как часть /etc/init.d/functions

если нужно, просто сделай

. /etc/init.d/functions

в вашем скрипте для загрузки функций оболочки, вероятно, в других версиях redhat, но это единственное, что я должен передать на данный момент

6 голосов
/ 01 марта 2014

Эти команды определены как часть Базы стандартов 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
4 голосов
/ 10 июня 2010

Команды вряд ли будут переносимыми. На самом деле, я впервые слышу о них, но, думаю, ваша проблема в том, чтобы работать с процессом по имени, а не с pid.

Отметьте man pgrep или man pkill - они немного более переносимы. Они являются частью пакета procps (откуда взялись ps и top) и должны быть доступны во всех вариантах Linux. Они также доступны на Solaris.

2 голосов
/ 26 ноября 2012

Те, что используются в Ubuntu, являются частью спецификации " Стандартная база Linux " и документированы там .

0 голосов
/ 26 июля 2011

У меня была та же проблема, что и у вас, она выдала предупреждение:

pidof: недопустимые параметры в командной строке!

Я изменил

"killproc -d 10 $cmd" 

до

"kill -9 \`pidof $cmd\`" 
0 голосов
/ 10 июня 2010

Я думаю, что эти команды являются специфическими особенностями: я никогда не видел их раньше.killproc должен быть чем-то вроде kill, но что должен делать procofpid?

В названии, которое вы говорите о pidofproc, вы можете найти эту команду под pidof на большинстве Linux-блоков.

...