existe alguma biblioteca C equivalente a killall no Linux?

0

Eu quero matar outro aplicativo semelhante ao comando killall como eu sei aplicativo, mas não pode obter PID em tempo de execução.

Isso tem que ser feito em código C. Eu sei kill() mas precisa de PID . Qualquer outra maneira equivalente a killall?

    
por coder007 26.04.2018 / 12:14

2 respostas

1

kill(2) é a chamada do sistema para enviar um sinal para um processo que não é equivalente ao utilitário killall .

Uma maneira fácil de fazer isso em C seria invocar killall do seu programa em C, usando a função de biblioteca do sistema (3) ou possível popen (3).

Como alternativa, você pode ler a página de manual sobre o sistema de arquivos /proc pseudo e procurar os nomes dos comandos e localizar os pids você mesmo.

man 2 kill
man 3 system
man 3 popen
man 5 proc
    
por 26.04.2018 / 13:08
0

Para responder a pergunta no título, não há nenhuma biblioteca C que faça essa correspondência. Nem mesmo a libprocps faz isso.

killall é um programa simples que:

  • calcula o que você deseja comparar com
  • efetivamente faz ls on / proc procurando por diretórios com apenas números em seus nomes e corresponde a arquivos nesses diretórios

Por ser genérico (por exemplo, não sabe quais critérios de correspondência um usuário usará de antemão), ele tem muitas correspondências. Você deve saber o que você quer combinar já. Sua pergunta não diz realmente, mas soa como o nome ou a linha de comando.

Eu realmente cautela esta abordagem inteira. Os processos devem ter certeza sobre quais outros processos eles estão tocando. O nome é um jogo terrível, pois eu posso banalizar isso. Considere também que você pode ter dois usuários ou dois sistemas usando o mesmo nome, qual processo deve ser eliminado?

Arquivos PID ou algum outro método que registra o PID no início do programa é muito melhor porque você sabe exatamente de que processo você está falando (a menos que eles bifurcem)

Como Richard aponta acima, o código killall é GPL2 + para que você possa reutilizá-lo com a mesma licença. O projeto foi movido para o gitlab e está no link

    
por 28.04.2018 / 12:06

Tags