Действительно ли `kill -p` работает?


11

В справочной странице 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, команда like kill -s SIGHUP |-p 123никогда не работала, и всегда сообщалось об ошибке

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

Я сделал какие-нибудь ошибки?


11
Обратите внимание , что когда вы ввели в команде, вы удалили [ ]скобки, и заменить signalс SIGHUPи pidс 123? Почему ты это сделал? Потому что вы знаете , что символы [, signalи pidявляются мета-синтаксический, а не буквально. Они указывают, что такое синтаксис. Ну, |символ это то же самое: еще один метасинтаксический индикатор синтаксиса. [a | b]означает: необязательный синтаксический элемент, который может быть одним aили b(но не обоими, поскольку это должен быть один элемент).
Каз

Спасибо за вашу инструкцию. Кстати, как вы произносите [a | b]?
user43312

Хм. «Необязательно А или В».
Каз

Ответы:


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 20.09.13

2
@ user43312: см. ответ СЛМ за это
Мат

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-).
SLM
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.