Чи дійсно працює `kill -p`?


11

На сторінці man killце написано наступним чином

СИНОПИС

  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.

Але як я багато разів намагався і в RH, і в RHEL, команда як kill -s SIGHUP |-p 123ніколи не працювала, і про помилку завжди повідомляється

bash: -p: команда не знайдена

Чи я помилявся?


11
Зауважте, що при введенні команди ви видалили [ ]дужки та замінили signalна SIGHUPі pidна 123? Чому ти це зробив? Тому що ви знаєте , що символи [, signalі pidє мета-синтаксичний, а не буквально. Вони вказують, що таке синтаксис. Ну, |символ те саме: інший метасинтаксичний показник синтаксису. [a | b]означає: необов'язковий синтаксичний елемент, який може бути або aабо b(але не обидва, оскільки він повинен бути одним елементом).
Каз

Дякую за вашу інструкцію До речі, як ви вимовляєте [a | b]?
user43312

Хм. "Необов’язково A або B".
Каз

Відповіді:


51
kill [ -s signal | -p ]

Цей синтаксис на сторінці керівництва означає:

Ви можете використовувати kill -s signal або можете використовувати kill -p, але ви не можете використовувати і те, -sі -pодночасно.

Труба ( |) позначає (ексклюзивно) або в документації, це не є частиною команди.

Коли ви вводите текст

foo | bar

у вашій оболонці, вона буде намагатися почати fooі bar, і трубу виходу fooдо barпрограмі. (Це оболонка, що робить це, а не foo(або bar), |перехід не передається жодному процесу.) У вашому випадку друга частина є -p 123, тому оболонка намагається знайти виконавчий файл, що викликається, -pі не працює з цим повідомленням про помилку.


Дякую, @Mat. Тому я даю таку команду kill -p 123. Це говорить bash: kill: p: invalid signal specification. І kill -p SIGINT 123говорить те саме. Я не думаю, що є місце для подачі сигналу відповідно до синтаксису. Ви не заперечуєте, якщо ви просто демонструєте використання цього -pваріанту?
user43312

2
@ User43312: см відповідь SLM в для цього
Mat

32

Я думаю, що ви стикаєтеся з тим, що є вбудована команда для виклику Bash killразом з командою kill.

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

Сторінка man, яку ви читаєте, посилається на killкоманду, розташовану під /bin. Використовуйте повний шлях, щоб викликати його:

$ /bin/kill -p sleep
16486

Між іншим, /usr/bin/killце лише посилання на /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

Це справді працює. І я вдячний за всі демонстрації.
user43312

@ user43312 - NP. Приклади завжди легші, ніж людині сторінки 8–8).
slm
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.