Проблема:
с 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
по умолчанию.
Если после того, что после того, как после того, как скручивается нечего
:
while true; do
avconv ... &
curl ... "pid=${!}"
wait $! && break
done