отлов нужного PID [Решил]

Всем доброго времени суток.
Я играюсь c Java сервером Lineage и когда мне нужно его закрыть, то нужно лезть в ps aux и отлавливать нужный PID потом kill -15 PID PID PID PID где есть два *.sh скрипта, которые лупят (loop) логин и гейм сервер.

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

Спасибо.

+1
itrch - 16 Июль, 2013 - 07:16
Изображение пользователя itrch.

pidof должен помочь. или pgrep.

0
dyug - 16 Июль, 2013 - 09:52

killall process_name точно не подходит? Или просто неизвестен был? :-)

0
lord_i - 16 Июль, 2013 - 10:16
Изображение пользователя lord_i.

Сталкивался с тем что killall не всегда убивает процесс. Правда на пожилых ядрах (openwrt с ядром 3.3.8 на роутере) Пришлось сделать такую конструкцию:
kill -KILL `pidof process_name`
Сильно глубоко не вникал, но это работает без вопросов

+1
dyug - 16 Июль, 2013 - 15:07

аха аха аха, теперь открываем man killall (наконец то) и там читаем, что и килл, и киллалл имеют одинаковые ключи. :-) то есть ему точно также можно скормить хоть "-15", хоть "-9", хоть
"killall sends a signal to all processes running any of the specified commands. If no signal name is specified, SIGTERM is sent."

ман рулит! :-)

+1
lord_i - 16 Июль, 2013 - 15:29
Изображение пользователя lord_i.

Дык это ман надо открыть ... :) Про ключи в killall как-то не думал... :) Чем дольше живешь, тем отчетливее понимаешь что нихрена не знаешь :)

0
kattoha - 16 Июль, 2013 - 18:59

Я пробовал разные варианты : killall java - комп после этого выключается только вытягиванием сети.
kill -15 нормально работает, но нужно искать PID
kill -9 работает, но оставляет закрытые порты + нужно искать PID.

Я хочу выключить нужные процессы без поиска PID. Как автоматизировать поиск PID без моего участия?

Кстати, если вводить PID взятый из ps aux|grep java то не выключается даже через -15

0
lord_i - 16 Июль, 2013 - 19:01
Изображение пользователя lord_i.

Попробуйте
killall -KILL java

0
kattoha - 16 Июль, 2013 - 19:24

Спасибо, помогло))

0
dyug - 16 Июль, 2013 - 20:29

ну вообще то я привел указание, что именно нужно прочитать.
то есть в Вашем случае
killall -15 java
будет делать именно то, что Вам хочется.
Вот, соответствие сигналов, промотать до "Standard signals"
то же самое можно прочитать в man 7 signal :-)

то есть, исходя из вышеуказанных данных можно сделать вывод:
сигнал -KILL и -15 являются синонимами, просто в разной записи.

0
kattoha - 17 Июль, 2013 - 19:28

Подскажите пожалуйста как выключить только этот процесс а не всю джаву?

java -Xmx128m -cp ./../libs/*:l2jserver.jar net.sf.l2j.loginserver.L2LoginServer

0
lord_i - 17 Июль, 2013 - 20:04
Изображение пользователя lord_i.

Посмотрите какой пид возвращает
pidof java
если тот что нужно - тогда
kill -KILL `pidof java`
если не работает - попробуйте вместо java вписать полную строку вызова процесса, которая выводится по ps

0
kattoha - 17 Июль, 2013 - 20:24

Нужно все-равно искать нужный PID вручную... (
Спасибо за Ваше время.

0
lord_i - 17 Июль, 2013 - 21:06
Изображение пользователя lord_i.

Да фигня... Не может такого быть. Все можно автоматизировать.
Скиньте сюда вывод ps -eaf и выделите процесс(ы), какой(какие) надо убить.
Только под кат!

0
kattoha - 17 Июль, 2013 - 21:38

loop-ы убиваю killall name

С жавой так не получается. Только полностью яву гавкнуть.

0
lord_i - 17 Июль, 2013 - 21:52
Изображение пользователя lord_i.

В данном примере если сделать ручками
kill -KILL 12073
kill -KILL 12124
получается нужный эффект? Или надо грохнуть только какой-то один?

0
kattoha - 17 Июль, 2013 - 21:57

та получается. Но это нужно искать PID своими глазами) Я пользуюсь Вашим советом killall -KILL java, но бывает запущен еклипс (пытаюсь изучить яву) - его такое тоже вырубает:/

0
lord_i - 17 Июль, 2013 - 22:11
Изображение пользователя lord_i.

Все можно сделать.
Во первых - для поиска всех пидов процессов "java" используем pgrep (как сразу указал уважаемый itrch)
то есть
pgrep java -fl
выведет весь список процессов с именем "java",притом с полными строками запуска.
теперь если в конструкцию добавить фильтр нужного процесса, например так:
pgrep java -fl | grep Xmx128m
У Вас останется одна строка с нужным Вам процессом.
Как из этой строки выделить пид для скармливания kill - домашнее задание.
Подсказка "bash работа со строками" :)

0
kattoha - 17 Июль, 2013 - 22:17

спасибо буду искать)

0
lord_i - 17 Июль, 2013 - 22:21
Изображение пользователя lord_i.

Не забудьте сообщить о результатах. Чтоб мы за Вас порадовались. :)
Текст рабочего скрипта тоже бы не помешал.

0
itrch - 18 Июль, 2013 - 06:57
Изображение пользователя itrch.

а если эту строку в скрипт. запускать скрипт и искать по имени скрипта?

0
kattoha - 28 Февраль, 2014 - 15:10

Не забудьте сообщить о результатах. Чтоб мы за Вас порадовались. :)
Текст рабочего скрипта тоже бы не помешал.

Вот, наконец, у меня есть успехи, но не совсем так как Вы хотели, но думаю, тоже, сойдет.
Я написал программу на java
Для неё нужна java 7. Здесь автозагружаемый jar.
При первом запуске программы она создает конфиг файл, куда Вы можете записать нужные процессы. В конфиге все описано более подробно.

Ссылка: PIDkiller

На её основе я сделал еще одну программку, (может кому понравится). Она смотрит есть ли рабочее соединение с интернетом и в зависимости от результат запускает/выключает приложения, которые Вы укажете в конфиге,
вроде аськи, торрента, скайпа и т. д.
Её написал под java 6+, потому, что у многих может не стоять еще 7. Можно поставить в автозапуск.
В конфиге, тоже, все описано. После заполнения конфига, нужно перезапустить программу.

Ссылка: InetChecker

Вот исходный код, если кому интересно.

PIDkiller

InetChecker

0
kattoha - 28 Февраль, 2014 - 15:15

исправил ошибку в программе, которая могла привести к удалению лишнего, если был неправильно настроен конфиг.

Отправить комментарий

CAPTCHA на основе изображений
Введите цифры