Modo multiplataforma (Linux, BSD, Solaris) para verificar se existe pid

1

Estou procurando uma maneira confiável de plataforma cruzada para verificar se um processo com um pid específico está em execução. Duas possíveis soluções surgiram:

  1. kill -0 $PID - status de saída é 0 se o processo existir e 1 se não, no entanto, ele também retorna 1 para pids que requerem privilégios adicionais para matar.
  2. ps a | grep "^\s*${PID}" e similares que são simples e feios.

Existe uma maneira de ter algo como # 1, mas sem a limitação do proprietário?

    
por Mischa Arefiev 14.02.2012 / 17:06

1 resposta

4

Você pode escrever um pequeno programa em C? A chamada do sistema kill(2) retorna -1 se o seu UID não tiver permissão para enviar um sinal para um determinado processo, mas errno está definido como EPERM nesse caso, em vez de ESRCH para um não PID inexistente. Estou razoavelmente certo de que você poderia torná-lo portátil em todo o Solaris, HP-UX, Linux e os * BSDs. Você teria que compilá-lo para cada plataforma.

    
por 14.02.2012 / 17:25