Intereting Posts
шаблон awk с переменной в скрипте bash readline – почему он делает только возврат каретки, а не линию при достижении конца строки? Нет xorg.conf, это framebufferCompression отключено, возможно без? Проблемы с установкой источника Как распечатать вывод файла PCL в файл PDF вместо принтера Команда в переменной 1 влияет на вывод другой переменной при отображении вместе в UNIX Автоматический перезапуск процесса при сбое Проблемы с кодировкой немецких справочных страниц Как восстановить несколько файлов, которые были перемещены в один? Debian: изменение исходного каталога в тройной загрузке Разрешения запрещать пользователям SSH доступ к другим папкам пользователя Как транспонировать оси X и Y таблицы, используя команды оболочки cut & paste Как заменить символ на курсор в emacs lisp Почему мой Linux mint замораживается? Как добавить скрипты для udev для запуска

Изящный способ убить процесс

После того, как мой скрипт bash выполняется с сервером selenium, сценарий убивает его следующим образом:

kill `ps -ef | grep selenium | awk '{ print $2 }'` 

В то время как это работает, и он убивает сценарий селена, он также пытается убить процесс grep selenium Таким образом, к тому моменту, когда номер процесса вернется к команде kill, процесс исчезнет, ​​поэтому он завершает создание сообщения об ошибке. (Другими словами: он заканчивает убийство двух процессов, один из которых является реальным сервером селена, другой – мимолетный процесс, который является побочным эффектом того, как я делаю эту команду.)

Есть ли более грациозный способ убить процесс, который не имеет этого непреднамеренного побочного эффекта?

(FWIW одна идея у меня: этот же скрипт запускает селен раньше в скрипте, поэтому, возможно, если бы я мог захватить PID, когда я запускаю селен, я мог бы просто сохранить это и убить его напрямую, вместо grepping for Идентификатор процесса. Проблема в том, что я не знаю, как получить этот PID, как использовать переменную, чтобы сохранить ее и как ссылаться на нее позже в скрипте. Но это лучший способ сделать это?)

Попробуйте использовать pkill selenium если ни это, ни одно из других не работает, вы можете продолжать использовать ваш метод с другой последовательностью труб, такой как

 kill `ps -ef|grep -i selenium| grep -v grep| awk '{print $2}'` 

Попробуйте команду pgrep , которая выведет PID интересующей вас команды.

 pgrep selenium 

Чтобы фактически убить процесс, используйте команду companion pkill .

 pkill selenium 

Попробуйте использовать grep [s]elenium . Это не нашло бы процесс grep.

Команда killall не упоминалась, и я считаю, что это полезное дополнение к репертуару.

 $ killall selenium 

Вы также можете использовать параметр -r regex чтобы указать регулярное выражение, соответствующее имени процесса, и даже значение времени:

 $ killall -o 5m selenium 

Убивает все процессы селена старше 5 минут.

Используйте переключатель -m 1 с командой grep, чтобы извлечь только первый найденный процесс. Пока вы сортируете свои процессы с помощью PID, по возрастанию он будет работать.