kill: не pid или действительная спецификация работы - PullRequest
0 голосов
/ 24 августа 2011

Я создал приложение, которое по сути является демоном, написанным на C. Оно останавливается и запускается с помощью сценария оболочки. В частности, чтобы остановить его, kill используется для отправки сигнала SIGTERM. PID демона сохраняется в файле на диске в формате:

1234\n

Пользователь сообщает, что он не может остановить демон, сценарий оболочки возвращает ошибку:

kill: `': not a pid or valid job spec

PID выбирается и используется в сценарии оболочки следующим образом:

if [ -f "${PID_FILE}" ]
then
    FCPID=`head -n 1 $PID_FILE`
    kill -n SIGTERM "${FCPID}"
    RETVAL=$?
    if [ $RETVAL -eq 0 ]
    then
        rm -f ${PID_FILE}
        echo "OK"
    else
        echo "FAIL"
        exit 1
    fi
else
    echo "Wasn't running"
    exit 1
fi

Он отлично работает на моей машине (Ubuntu 10.04), и до сих пор никто больше не сообщал об этой проблеме. Кто-нибудь распознает ошибку или в скрипте оболочки есть ошибка, которая может вызвать проблемы на некоторых платформах?

Ответы [ 3 ]

1 голос
/ 24 августа 2011

Что такое kill -n?Я думаю, что вы имели в виду kill -s.Кроме того, мы можем проверить, что FCPID устанавливается.

FCPID=`head -n 1 $PID_FILE`
if [ -n "${FCPID}" ] ; then
  kill -s SIGTERM "${FCPID}"
  ... # the rest of what happens after kill
fi
1 голос
/ 24 августа 2011

Добавьте флаг -kvx (при условии, что вы используете ksh) в вашей строке shebang, как показано ниже.

#!usr/bin/ksh -kvx

После выполнения сценария вы могли четко видеть, какой аргумент передается в killкоманда.

1 голос
/ 24 августа 2011

Эта ошибка возникает, когда вы передаете kill пустой аргумент в качестве PID, т.е.

[me@home]$ kill -n SIGTERM ""
kill: `': not a pid or valid job spec

Полагаю, ваш скрипт выдает эту ошибку, когда PID_FILE существует, но пуст, поэтому ${FCPID} заканчивается пустой строкой.

Убедитесь, что стартовый скрипт действительно правильно пишет PID_FILE на компьютере вашего пользователя.

...