Os usuários só podem matar ou sinalizar seus próprios processos.
Você diz que o processo é iniciado por um daemon sendo executado como root. Esse processo precisa ser executado como root também? Se isso não acontecer, deixe-o descartando privilégios e executando como o usuário desejado.
Se o processo deve ser executado como root, você terá que fornecer uma maneira para o agente elevar seus privilégios para eliminar o processo. Isso pode assumir a forma de um executável auxiliar de raiz setuid ou uma entrada no arquivo sudoers
(com a tag NOPASSWD
). A entrada do sudo tem a vantagem de que seu uso será registrado.
Note que não há uma maneira atômica de enviar um sinal para um processo. O envio de um sinal é assíncrono : é possível que você obtenha o PID de um processo e, em seguida, envie um sinal para esse processo, mas o processo morreu nesse meio tempo e seu ID de processo já foi reutilizado por outro processo .
Existe uma maneira de evitar isso envolvendo o pai do processo que você quer matar, mas é complicado. O ID do processo não desaparecerá até que seu pai reconheça a morte da criança (um processo zumbi permanece até então). Para usar isso efetivamente, você precisa que os pais saibam que devem aguentar até que nenhum agente queira matar a criança.
Se você não estiver preocupado com a condição de corrida, pode conceder ao agente a permissão para executar pkill name_of_process_to_kill
, se souber que haverá um único processo com esse nome. Se você puder identificar o processo com um arquivo aberto, use fuser -k /path/to/file
.
Se puder, modifique o processo para que ele receba uma solicitação de finalização em um canal ou soquete. Configure as permissões ou autenticação no pipe ou no soquete de acordo com suas necessidades.