Kill(pid, 0), похоже, неправильно устанавливает код ошибки... как указано в man для kill
Ошибки
Функция kill() завершится ошибкой, если:
EINVAL Значение аргумента sig является недопустимым или неподдерживаемым номером сигнала.
EPERM У процесса нет разрешения на отправку сигнала какому-либо процессу-получателю.
ESRCH Не удается найти процесс или группу процессов, соответствующие указанному по пид. Следующие разделы информативны. 1
Он возвращает ENOENT (нет такого файла или каталога), а затем иногда возвращает EINTR (системный вызов прерван)...
Вот что я делаю:
kill(g_StatusInstance[i].pid, SIGTERM) == -1 && log_fatal_syscall("kill-sigterm");
kill(g_StatusInstance[i].pid, 0);
log_info_console( "Checking process for errors: %s\n", strerror(errno));
if(errno != ENOENT)
{
kill(g_StatusInstance[i].pid, SIGKILL) == -1 && log_fatal_syscall("kill-sigkill");
}
Я делаю что-то неправильно?
errno
равно 0 перед вызовомkill
? - person n. 1.8e9-where's-my-share m.   schedule 25.10.2012kill()
.errno
допустимо только в том случае, еслиkill()
возвращает-1
. - person Robᵩ   schedule 25.10.2012kill(pid, 0)
только проверяет ошибки, сигнал не отправляется... - person JonH   schedule 25.10.2012errno
передkill
, и если да, то проверяли ли вы результат и возвращали лиerrno
значение 0? - person n. 1.8e9-where's-my-share m.   schedule 25.10.2012kill(pid, 0)
выполняет только проверку ошибок — но вы игнорируете результат проверки ошибок! Вы должны проверить возвращаемое значение отkill()
, чтобы определить, произошла ли ошибка. - person Robᵩ   schedule 25.10.2012errno
существенно неопределенно. Это может быть ENOENT, это может быть EINTR, это может быть что угодно. - person Robᵩ   schedule 25.10.2012