Как знать, когда команда оболочки, работающая в backround том, чтобы быть уничтоженным или, умерла

Проблема:

с LSOF -I: 3000 -T , вы будете искать Любые процессы, подключенные к порту 3000, которые могут быть на стороне .

В тех случаях, когда вы используете свой скрипт, браузер, по-видимому, имеет соединение на сервере Rails на порту 3000. Разница находится в синхронизации между использованием браузера и с использованием Убить .

Это означает, что браузер перечислен в выходе LSOF тоже и убил.

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


Общее решение:

PKILL - правильный инструмент для работы.
Для пытается Что сопоставляется, используйте PGREP , который соответствует тому же способу:

, если командная строка сервера, как показано в PS, начинается с командой Имя , которое идентифицирует экземпляр вашего сервера, вы можете использовать PKILL ServerCommand .
Если вам нужно сопоставить часть командной строки аргументов, добавьте -F , как PKILL -F ServerArgument .

Процессы, убитые pkill , будут просто перечислены PGREP - так используйте, что, чтобы попробовать, что будет убито. Добавьте опцию - на PGREP , чтобы перечислить командную строку, а не только PID.


Примеры для PGREP / PKILL:

в качестве примера для использования -F : согласно PS , эти два экземпляра XBindkeys работают:

$ ps aux|grep '[x]bindkeys'
26719 ?        S      0:00 xbindkeys -f /tmp/xbindkeysrc-tmp
32046 ?        S      0:00 xbindkeys -f /home/auser/.xbindkeysrc

Теперь я могу найти оба экземпляра с:

$ pgrep xbindkeys
26719
32046

или показывать команды:

$ pgrep -a xbindkeys
26719 xbindkeys -f /tmp/xbindkeysrc-tmp
32046 xbindkeys -f /home/auser/.xbindkeysrc

или соответствовать одному из экземпляров аргументов командной строки:

$ pgrep -f '/home/auser/.xbindkeysrc'
32046

без -F , ни один из Процессы сопоставляются:

$ pgrep '/home/auser/.xbindkeysrc'

Наконец, отправка процесса сигнал, вроде с Убить :

$ pkill -f '/home/auser/.xbindkeysrc'


альтернативное решение на основе оригинального подхода:

решение с PKILL Более общее, но чтобы следовать вашему первоначальному подходу, может быть сделана LSOF более строго , чтобы соответствовать
«Любой локальный сервер, слушающий порт»,
вместо
«Любая программа, использующая локальный порт в любом случае или использовать удаленный порт этого номера в любом случае».

Опция -STCP: прослушивание ограничивает список портах, прослушивающих, и, поскольку только локальные порты могут быть прослушиваться, также только к локальным портам.

Это может быть использовано в качестве , если , если Test Test:

if lsof -i :3000 -sTCP:LISTEN -t >/dev/null ; then
    echo running
else
    echo not running
fi



Сбочная записка на использовании SIGKILL, как в убийстве -9:

Сигнал убийства может использоваться с PKILL Точно так же, как и с убийством :

$ pkill -9 -f '/home/auser/.xbindkeysrc'

, но в большинстве общих случаев не имеет преимущества выше сигнала по умолчанию -15 , а в некоторых случаях он разбивает вещи Отказ Так что это не хорошая идея, чтобы сделать это привычкой.

Посмотрите на , когда я должен не убить -9 процесс? Чтобы понять, почему вы не хотите использовать -9 по умолчанию.

0
05.02.2015, 00:03
1 ответ

Если после того, что после того, как после того, как скручивается нечего :

while true; do
  avconv ... &
  curl ... "pid=${!}"
  wait $! && break
done
1
28.01.2020, 02:51

Теги

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