¿`Kill -p` realmente funciona?


11

En la página del manual killestá escrito de la siguiente manera

SINOPSIS

  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.

Pero como lo intenté muchas veces en RH y RHEL, el comando kill -s SIGHUP |-p 123nunca funcionó y siempre se informa un error

bash: -p: comando no encontrado

¿Cometí algún error?


11
Tenga en cuenta que cuando escribió el comando, eliminó los [ ]corchetes y lo reemplazó signalcon SIGHUPy pidcon 123? ¿Por qué hiciste eso? Porque sabes que los símbolos [, signaly pidson meta-sintácticos, en lugar de literales. Indican cuál es la sintaxis. Bueno, el |símbolo es lo mismo: otro indicador meta-sintáctico de sintaxis. [a | b]significa: elemento sintáctico opcional, que puede ser cualquiera ao b(pero no ambos, ya que debe ser un elemento).
— Kaz

Gracias por tu instrucción Por cierto, ¿cómo se pronuncia [a | b]?
— user43312

Hmm "Opcional A o B".
— Kaz

Respuestas:


51
kill [ -s signal | -p ]

Esta sintaxis en una página de manual significa:

Puede usar kill -s signal o puede usar kill -p, pero no puede usar ambos -sy -pal mismo tiempo.

El pipe ( |) significa (exclusivo) o en la documentación, no es parte del comando.

Cuando escribes

foo | bar

en su concha, que intentará arrancar fooy bar, y canalizar la salida de fooal barprograma. (Ese es el shell que hace eso, no foo(o bar), el |no se pasa a ninguno de los procesos). En su caso, la segunda parte es -p 123, por lo que el shell intenta encontrar un ejecutable llamado -py falla con ese mensaje de error.


Gracias, @Mat. Entonces doy una orden como kill -p 123. Dice bash: kill: p: invalid signal specification. Y kill -p SIGINT 123dice lo mismo. No creo que haya lugar para poner la señal de acuerdo con la sintaxis. ¿Te importa si solo das una demostración del uso de la -popción?
— user43312

2
@ user43312: vea la respuesta de slm para eso
— Mat

32

Creo que te estás tropezando por el hecho de que hay un comando incorporado para Bash llamado kill, junto con el comando kill.

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

La página del manual que está leyendo se refiere al killcomando ubicado debajo /bin. Usa la ruta completa para invocarlo:

$ /bin/kill -p sleep
16486

Por cierto, el /usr/bin/killes solo un enlace a /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

Esto realmente funciona. Y lo aprecio por todas las demos.
— user43312

@ user43312 - NP. Los ejemplos son siempre más fáciles de seguir que las páginas de manual 8-).
— slm
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.