Pgrep возвращает mutiple PIDs

Они используются для запуска (инициализируют) систему и поднимают серверы. Как обычный пользователь Вам не придется волноваться о них. Если бы Вы хотите также оказаться Вами машина в, скажем, HTTP (сеть) сервер, необходимо было бы иметь дело с ним. Различные дистрибутивы делают это по-другому, как бы то ни было. У многих, по крайней мере, есть a service управляйте, чтобы запустить и остановить их.

7
01.06.2016, 19:28
4 ответа

Я должен был заняться этой той же проблемой несколько недель назад. pgrep и pkill поддерживайте расширенные регулярные выражения, таким образом, это - простой вопрос получения права regexp.

Это - Ваш сценарий с regexp, который я использовал.

#!/bin/bash
ProcessName=$1

pID= pgrep -fl "^(/.*)?${ProcessName}\s"

echo $pID

Хотя с помощью pkill (как предложенный Caleb), лучше.

pkill -fl "^(/.*)?${ProcessName}\s"

Вы, возможно, все еще должны настроить regexp для получения желаемых результатов для варианта использования и как программа выполняется.

Теперь, если будет на самом деле несколько процессов, работающих с тем именем, то они будут, конечно, уничтожены. Если Вы хотите избежать, чтобы можно было использовать -o уничтожить только самый старый процесс соответствия или -n уничтожить только новейшее. Если Вы хотите только один, но ни один самое старое или новейшее затем Вы, вероятно, не должны использовать p(kill|grep).

3
27.01.2020, 20:19
  • 1
    bahamat, спасибо за подсказку и я смог использовать regex успешно. –  greenhorn 30.08.2012, 07:53
#!/bin/bash

ProcessName=$1

pID=`pgrep -fl $ProcessName`

echo "$pID" | grep -v  "^$$"
1
27.01.2020, 20:19
  • 1
    Точка pgrep и pkill это, Вы не должны передавать его по каналу к grep. –  bahamat 29.08.2012, 18:38
  • 2
    преимущества, он зависит. в этом случае мы должны отфильтровать текущий процесс, он - pid –  hostmaster 29.08.2012, 23:15
  • 3
    нет, Вы не понимаете. Тот и только точка pgrep не должен передавать по каналу к grep. Если Вы собираетесь использовать grep Вы могли бы также использовать ps | grep. –  bahamat 29.08.2012, 23:34
  • 4
    я боюсь, что у Вас есть недоразумение здесь. основной момент подготовительной школы ищет процессы на основе имени и другого –  hostmaster 30.08.2012, 09:58
  • 5
    назад во время Соляриса запускают каждый init сценарий, названный эквивалентом kill $(ps -ef | grep somedaemon | grep -v grep | awk '{print $2}'). Дополнительные ветвления увеличивали начальную загрузку время путем запуска 5x количество необходимых процессов. pkill и pgrep были записаны так, Вы могли просто звонить pkill somedaemon и значительно уменьшите, загружают времена. –  bahamat 30.08.2012, 21:01

при исключении #!/bin/bash затем, он не разветвит другой процесс для сценария, но Вы потеряете выбор того, с какой оболочкой он работает. удар является достаточно значением по умолчанию, хотя и те, которые являются smiler, должны смочь выполнить это.

не уверенный, если это избавится от второго идентификатора процесса все же.

Я понимаю, что это не завершено, но поздно, и я должен работать в, но это "должно" работать быстрым исправлением.

0
27.01.2020, 20:19
  • 1
    благодарит занять время это поздно вечером, к сожалению, это возвращает пустую строку, а также корректный pid, как этот удар 3,00$./dynamic_values.sh тестовый процесс, который - 10534/opt/XXengine - выполненный - propFile/opt/application/test/test-Process_Archive.tra - innerProcess $ –  greenhorn 29.08.2012, 06:58

Не был бы с помощью

| grep -v $$

исключить Ваш процесс из справки списка?

0
27.01.2020, 20:19
  • 1
    Точка pgrep и pkill это, Вы не должны передавать его по каналу к grep. –  bahamat 29.08.2012, 18:38

Теги

Похожие вопросы