2015-10-20 3 views
2

Я прочитал о сигналах, и я знаю, как отправить сигнал в процесс из командной строки. Просто сделайтеОтправить сигнал для обработки из командной строки

ps -C executable 

знать PID процесса, а затем

kill -s signal pid(number) 

Однако, я хотел бы найти более интерактивный и общий способ сделать это, если это возможно.

Я хочу отправить сигнал в конкретный процесс из командной строки. Мне не нужно печатать PID процесса, который я хочу сигнализировать, а скорее использовать способ, которым код понимает, какой процесс должен сигнализироваться.

Помимо этого я хотел бы понять, что делает команда kill.

  • Он убивает процесс, который сигнализирует?
  • Это убивает процесс, когда он называется?
  • Если он убивает процесс, это значит, что он похож на exit(0), или процесс возобновляется после отправки сигнала обратно?
+0

Итак, что бы вы хотели: * форма отправки сигнала? Можете ли вы указать его на примере? –

+0

@EugeneSh. Я бы сказал, что команда, которая будет запускать функцию в коде, была бы идеальной. Я бы не смог создать функцию для отправки сигнала без проблем. Я все равно хочу знать, что убивает, хотя –

ответ

6

Насколько я понял ваш вопрос, вы хотите сигнализировать процесс по его имени, а не его ПИД. Это может быть легко достигнуто путем объединения двух команд:

kill -s signal $(ps -C executable) 


он убивает ли процесс, что сигналы?

killможет убить. Это не обязательно.

От man kill:

Команда убить посылает указанный сигнал в указанных процессах или групп процессов.

Это означает, что команда kill используется для ** отправки любого сигнала в целом.

Если он убивает процесс это означает, что он похож делать exit(0) или делает процесс резюме после того, как сигнал посылается обратно?

От here:

Сигнал SIGKILL используется, чтобы вызвать немедленное завершение программы. Он не может быть обработан или проигнорирован и поэтому всегда фатален. Это также невозможно заблокировать этот сигнал.

Если процесс получает сигнал SIGKILL, он немедленно прекращается (без вызова деструкторов, без очистки). Единственными процессами, которые не заканчиваются, являются бесперебойные процессы.


Полный список доступных сигналов на Linux найден here.

+0

, поэтому я могу использовать kill без проблем, и он не будет приостанавливать или убивать какой-либо процесс, если я не использую сигнал SIGKILL? –

+0

Однако у меня есть 3 процесса, поэтому я думаю, что ваше предложение ответа отправит сигнал всем трем из них, а не 1 конкретный –

+0

@ AndréAlmeida 'kill' только посылает сигналы. Существуют и другие сигналы, такие как 'SIGSTOP' или' SIGTERM', которые останавливают/завершают программы. Вам нужно посмотреть каждую функцию сигнала, чтобы быть уверенным, что она делает. – Downvoter

0

Я хочу отправить сигнал на определенный процесс из командной строки. Мне не нужно печатать PID процесса, который я хочу сигнализировать, а скорее использовать способ, которым код понимает, какой процесс должен сигнализироваться.

Команда killall соответствует этим критериям, если она у вас имеется. Он позволяет указать процесс (ы) для сигнала на основе их имен. Все следующие комментарии в равной степени относятся к эффектам подачи сигнала через killall и доставляют один через kill.

Помимо этого я хотел бы понять, что делает команда kill.

Он убивает процесс, который сигнализирует?

Он доставляет указанный сигнал. Вот и все. Некоторые сигналы, которые он может доставить, будут иметь последствия для уничтожения процесса.

Это убивает процесс, когда он называется?

Он доставляет сигнал только указанному процессу.

Если он убивает процесс, это означает, что он аналогичен exit (0), или возобновляется процесс после отправки сигнала обратно?

Процессы могут обрабатывать некоторые сигналы без прерывания. То, что происходит, когда процесс получает один из этих сигналов, зависит от процесса. Если процесс не предоставляет обработчик для сигнала, действие по умолчанию которого заключается в прекращении процесса, тогда процесс будет умирать, а не возобновляться. Эффект аналогичен эффекту вызова функции exit() или возврату с main(), но завершение происходит круто, без вызова обработчиков выходов или таких.

Смежные вопросы