O 'kill -p' realmente funciona?

11

Na página man de kill está escrito como segue

SYNOPSIS

  kill [ -s signal | -p ] [ -a ] [ -- ] pid ...
  kill -l [ signal ]

  -p     Specify  that kill should only print the process id (pid) of the
          named processes, and not send any signals.

Mas, como eu tentei muitas vezes em RH e RHEL, o comando como kill -s SIGHUP |-p 123 nunca funcionou e um erro é sempre relatado

bash: -p: command not found

Eu cometi algum erro?

    
por user43312 20.09.2013 / 08:01

2 respostas

51

kill [ -s signal | -p ]

Esta sintaxe em uma página de manual significa:

You can use kill -s signal or you can use kill -p, but you can't use both -s and -p at the same time.

O pipe ( | ) representa (exclusivo) ou na documentação, não faz parte do comando.

Quando você digita

foo | bar

no seu shell, ele tentará iniciar foo e bar e canalizar a saída de foo para o programa bar . (Esse é o shell fazendo isso, não foo (ou bar ), o | não é passado para nenhum processo.) No seu caso, a segunda parte é -p 123 , então o shell tenta encontrar um executável chamado -p e falha com essa mensagem de erro.

    
por 20.09.2013 / 08:18
32

Acho que você está desestabilizando o fato de que há um comando interno para o Bash chamado kill , junto com o comando kill .

$ type -a kill
kill is a shell builtin
kill is /usr/bin/kill
kill is /bin/kill

A página man que você está lendo está se referindo ao comando kill localizado em /bin . Use o caminho completo para evocá-lo:

$ /bin/kill -p sleep
16486

Aliás, o /usr/bin/kill é apenas um link para /bin/kill .

$ ls -l /usr/bin/kill
lrwxrwxrwx 1 root root 14 Feb  9  2011 /usr/bin/kill -> ../../bin/kill

$ readlink -m /usr/bin/kill
/bin/kill
    
por 20.09.2013 / 11:09