Seu soft_kill tem alguns problemas.
- matar um processo não é instantâneo, mas matar saídas assim que o sinal é enviado. Você terá que esperar um pouco antes de determinar se o comando kill foi bem-sucedido ou se é necessário escalonar para -INT ou -HUP.
- kill retorna (1) zero (sucesso) se for permitido enviar o sinal. Não se conseguir matar o processo. Então, no seu código, apenas a primeira morte será executada.
(1)
kill ()
VALORES DE RETORNO
Se bem sucedido, kill () retorna um valor de zero. Na falha, ele retorna um valor de -1, não envia um sinal e configura errno para um dos seguintes valores:
EINVAL
O valor de sig é um número de sinal inválido ou não suportado.
EPERM
O ID do usuário do processo de envio não é privilegiado; seu ID de usuário real ou efetivo não corresponde ao ID do usuário real ou salvo do processo de recebimento. Ou, o processo não tem permissão para enviar o sinal para qualquer processo de recebimento.
ESRCH
Nenhum processo ou grupo de processos pode ser encontrado que corresponda ao que pid especifica.