Est-ce que `kill -p` fonctionne vraiment?

11

Dans la page de manuel, killil est écrit comme suit

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.

Mais comme j'ai essayé plusieurs fois dans RH et RHEL, la commande kill -s SIGHUP |-p 123n'a jamais fonctionné et une erreur est toujours signalée

bash: -p: commande introuvable

Ai-je fait des erreurs?

user43312
la source
11
Notez que lorsque vous avez tapé la commande, vous avez supprimé les [ ]crochets et remplacé signalpar SIGHUPet pidpar 123? Pourquoi fais-tu ça? Parce que vous savez que les symboles [, signalet pidsont métasyntaxiques, plutôt que littéraux. Ils indiquent quelle est la syntaxe. Eh bien, le |symbole est la même chose: un autre indicateur méta-syntaxique de la syntaxe. [a | b]signifie: élément syntaxique facultatif, qui peut être soit aou b(mais pas les deux car il doit s'agir d'un seul élément).
Kaz
Merci pour vos instructions. Au fait, comment prononcez-vous [a | b]?
user43312
Hmm. "Facultatif A ou B".
Kaz

Réponses:

51
kill [ -s signal | -p ]

Cette syntaxe dans une page de manuel signifie:

Vous pouvez utiliser kill -s signal ou vous pouvez utiliser kill -p, mais vous ne pouvez pas utiliser à la fois -set -pen même temps.

Le pipe ( |) signifie (exclusif) ou dans la documentation, il ne fait pas partie de la commande.

Lorsque vous tapez

foo | bar

dans votre shell, il tentera de démarrer fooet bar, et de diriger la sortie de foovers le barprogramme. (C'est le shell qui fait cela, pas foo(ou bar), le |n'est transmis à aucun des processus.) Dans votre cas, la deuxième partie est -p 123, donc le shell essaie de trouver un exécutable appelé -pet échoue avec ce message d'erreur.

Tapis
la source
Merci, @Mat. Je donne donc une commande comme kill -p 123. Ça dit bash: kill: p: invalid signal specification. Et kill -p SIGINT 123dit la même chose. Je ne pense pas qu'il y ait de place pour mettre le signal selon la syntaxe. Cela vous dérange si vous donnez simplement une démonstration de l'utilisation de l' -poption?
user43312
2
@ user43312: voir la réponse de slm pour cela
Mat
32

Je pense que vous êtes déclenché sur le fait qu'il existe une commande intégrée à Bash appelée kill, avec la commande kill.

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

La page de manuel que vous lisez fait référence à la killcommande située sous /bin. Utilisez le chemin complet pour l'invoquer:

$ /bin/kill -p sleep
16486

Soit dit en /usr/bin/killpassant, c'est juste un lien vers /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
slm
la source
Cela fonctionne vraiment. Et j'apprécie pour toutes les démos.
user43312
@ user43312 - NP. Les exemples sont toujours plus faciles à suivre que les pages de manuel 8-).
slm