Сервер Rails говорит, что порт уже используется, как убить этот процесс?

Я нахожусь на mac, делая:

сервер rails

Я получаю:

2010-12-17 12:35:15] INFO  WEBrick 1.3.1
[2010-12-17 12:35:15] INFO  ruby 1.8.7 (2010-08-16) [i686-darwin10.4.0]
[2010-12-17 12:35:15] WARN  TCPServer Error: Address already in use - bind(2)
Exiting

Я знаю, что могу запустить его на новом порту, но я хочу убить этот процесс.

Ответ 1

Предполагая, что вы хотите убить все, что находится на порту 3000 (что обычно используется webrick), введите это в своем терминале, чтобы узнать PID процесса:

$ lsof -wni tcp:3000

Затем используйте число в столбце PID, чтобы убить процесс:

$ kill -9 PID

Ответ 2

kill -9 $(lsof -i tcp:3000 -t)

Ответ 3

Вам нужно получить идентификатор процесса программы с помощью tcp-порта 3000. Чтобы получить идентификатор процесса

lsof -i tcp:3000 -t

И затем, используя этот идентификатор процесса, просто уничтожьте процесс, используя команду kill ubuntu.

kill -9 pid

Или просто запустите указанную команду комбайна. Сначала он выберет pid, а затем убьет этот процесс.

kill -9 $(lsof -i tcp:3000 -t)

Ответ 4

Для тех, кто сталкивается с этим вопросом, который не находится на Mac: если вы знаете, что ваш сервер работает на порту 3000, вы можете сделать это одним выстрелом, выполнив следующее:

fuser -k 3000/tcp

Но, как сказал Тоби, реализация фьюзера в Mac OS довольно примитивна, и эта команда не будет работать на Mac.

Ответ 5

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

ps aux | grep rails

Выход будет похож на

user     12609  9.8  0.5  66456 45480 pts/0    Sl+  21:06   0:02 /home/user/.rvm/rubies/ruby-2.2.0-preview1/bin/ruby bin/rails s

Здесь process_id 12609 используется сервером rails.

Вы можете легко убить его командой

kill -9 12609

Ответ 6

Все приведенные выше ответы действительно хороши, но мне нужен был способ ввода как можно меньше в терминале, поэтому я создал для этого камень. Вы можете установить драгоценный камень только один раз и запустить команду "shutup" каждый раз, когда вы хотите убить Rails-процесс (находясь в текущей папке).

gem install shutup

затем зайдите в текущую папку вашего проекта rails и запустите

shutup # это убьет текущий Rails-процесс

Вы можете использовать команду 'shutup' каждый раз, когда хотите

DICLAIMER: Я создатель этого драгоценного камня

ПРИМЕЧАНИЕ: если вы используете rvm, установите gem глобально

rvm @global do gem install shutup

Ответ 7

ps aux | grep rails используют эту команду, вы можете убить сервер

Ответ 8

Одноканальное решение:

kill -9 $(ps aux | grep 'rails s' | awk {'print$2'}); rails s

Ответ 9

По умолчанию сервер rails использует порт 3000.
Итак, у вас есть 2 варианта запуска сервера rails.
1. Либо вы можете запустить сервер на другом порту, определив пользовательский порт с помощью следующей команды
rails s -p 3001
2. Или вы можете уничтожить все запущенные процессы ruby, выполнив следующую команду
killall -9 ruby
затем запустить rails server

Ответ 10

Введите

man lsof

Затем найдите -w, -n и -i

-i: интернет-материал -n: делает это быстрее -w: переключает предупреждения

Есть более подробные сведения о страницах руководства

Ответ 11

Если вы находитесь на машине с Windows, выполните следующие действия.

c:/project/
cd tmp
c:/project/tmp
cd pids
c:/project/tmp/pids
dir

Там будет файл с именем server.pid

удалите его.

c:/project/tmp/pid> del *.pid

Вот оно.

EDIT: Пожалуйста, обратитесь к этому вопросу