2013-09-27 4 views
0

Может кто-нибудь сказать мне, почему это иногда не:Killing ошибки нескольких процессов

if [ $(pgrep -f agent.jar | wc -l) -gt 1 ]; then 
    kill $(pgrep -f agent.jar | grep -v $(pgrep -of agent.jar) | sort -n | uniq | awk '{printf $1" "}'); 
fi 

Цель этой части кода заключается в следующем:

  1. Проверьте, существуют ли дублирующие процессы. Обратите внимание на то, как я ссылаюсь на файл .jar вместо java, если другие приложения Java работают

  2. Если обнаружены дубликаты, они получают идентификаторы процесса из последних дубликатов (т. Е. Оставляют оригинал) и пытаются убить дубликаты ,

Код отлично работает. Он обнаруживает дубликаты и убивает их, но иногда он поднимает третий процесс (возможно, grep pid или ps pid) и пытается его убить. Я не знаю, что такое случайный ПИД-анализ. Его единственное временное, поэтому я угадываю его часть линии убийства.

Вот пример ошибки

/start.sh: line 15: [: 3183: binary operator expected 

Это в конечном счете, в конечном итоге бросает эту ошибку в терминал, который выглядит плохо. Возможно, можно игнорировать его, поскольку он в противном случае выполняет свою работу, но это будет неаккуратно, и есть вероятность того, что какое-либо другое условие нарушит сценарий, поэтому в идеале мне нужно его исправлять.

Спасибо за вашу помощь

+0

Что в вашей линии 15? – konsolebox

+0

kill $ (pgrep -f agent.jar | grep -v $ (pgrep -of agent.jar) | sort -n | uniq | awk '{printf $ 1 ""}'); – Atomiklan

+0

Это не похоже на то, что на вашей линии 15. '[' нигде нет. – konsolebox

ответ

0

это терпит неудачу (иногда), потому что в вашем худшем случае ваш получать 3 другой список PIDs. Запросите ваш pgrep-список и снова проверьте pid с помощью ps -p.

+0

Это все еще не объясняет, почему его даже перечисление третьего ПИД-кода начинается. Он не должен указывать этот период PID. – Atomiklan

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