У вашего soft_kill есть несколько проблем.
- уничтожение процесса не происходит мгновенно, но kill завершается сразу после отправки сигнала. Вам придется подождать некоторое время, прежде чем определить, успешно ли выполнена команда kill или вам нужно перейти в -INT или -HUP.
- kill возвращает (1) ноль (успех), если разрешено отправлять сигнал. Нет, если удастся убить процесс. Таким образом, в вашем коде будет выполнено только первое уничтожение.
(1)
убийство()
ВОЗВРАЩАЕМЫЕ ЦЕННОСТИ
В случае успеха kill() возвращает значение ноль. При сбое он возвращает значение -1, не отправляет сигнал и устанавливает errno на одно из следующих значений:
EINVAL
Значение sig является недопустимым или неподдерживаемым номером сигнала.
EPERM
Идентификатор пользователя процесса отправки не является привилегированным; его действительный или эффективный идентификатор пользователя не соответствует действительному или сохраненному идентификатору пользователя в процессе получения. Или у процесса нет разрешения на отправку сигнала любому процессу получения.
ESRCH
Не может быть найдено ни одного процесса или группы процессов, соответствующих указанному в pid.