Как мне отключить простой HTT-сервер на python?
Итак, я пытаюсь выучить d3, и вики предположил, что
Для локального просмотра примеров у вас должен быть локальный веб-сервер. Любой веб-сервер будет работать; Например, вы можете запустить встроенный сервер Python:
python -m SimpleHTTPServer 8888 &
Отлично... только сейчас у меня работает сервер... но в какой-то момент я думаю, что, вероятно, мне следует снова его отключить.
Есть ли лучший способ выключить его, чем с помощью kill <pid>
? Это похоже на большой молоток для маленькой работы.
(Я использую Mac OS 10.6.8 (Snow Leopard))
FWIW: ctrl+c
дает около 10 строк трассировки, жалуясь на прерывание.
kill -3 <pid>
выдает предупреждение Finder в отдельном окне "Python неожиданно завершил работу".
По умолчанию kill <pid>
а также kill -15 <pid>
относительно чисты (и просты).
9 ответов
Вы просто посылаете сигналы процессам. kill
это команда для отправки этих сигналов.
Клавиатура команда Ctrl + C (⌃
+C
отправляет SIGINT, kill -9
посылает SIGKILL, и kill -15
отправляет SIGTERM.
Какой сигнал вы хотите отправить на свой сервер, чтобы завершить его?
Если вы запустили сервер с
python -m SimpleHTTPServer 8888
Затем вы можете нажать Ctrl + C, чтобы выключить сервер.
Но если вы запустили сервер с
python -m SimpleHTTPServer 8888 &
или же
python -m SimpleHTTPServer 8888 & disown
сначала вы должны увидеть список, чтобы убить процесс,
Команда запуска
ps
или же
ps aux | less
он покажет вам какой-нибудь запущенный процесс, как этот..
PID TTY TIME CMD
7247 pts/3 00:00:00 python
7360 pts/3 00:00:00 ps
23606 pts/3 00:00:00 bash
Вы можете получить PID отсюда. и убить этот процесс, выполнив эту команду..
kill -9 7247
здесь 7247 - идентификатор питона.
Также по какой-то причине, если порт все еще открыт, вы можете закрыть порт с помощью этой команды
fuser -k 8888/tcp
здесь 8888 - порт tcp, открытый python.
Надеюсь, теперь все ясно.
MYPORT=8888;
kill -9 `ps -ef |grep SimpleHTTPServer |grep $MYPORT |awk '{print $2}'`
Это так!!
Объясните командную строку:
ps -ef
: список всех процессов.grep SimpleHTTPServer
: процесс фильтрации, который принадлежит "SimpleHTTPServer"grep $MYPORT
: фильтр снова процесс принадлежит "SimpleHTTPServer", где порт является MYPORT (.ie: MYPORT = 8888)awk '{print $2}'
: напечатать второй столбец результата, который является PID (ID процесса)kill -9 <PID>
: Принудительно уничтожить процесс с помощью соответствующего PID.
Или вы можете просто сделать kill %1
, который убьет первую работу, помещенную в фоновом режиме
Оказывается, есть отключение, но это должно быть инициировано из другого потока.
Это решение работало для меня: /questions/22569431/zavershenie-rabotyi-soket-servera-serveforever-v-odnopotochnom-prilozhenii-python/22569445#22569445
Когда вы запускаете программу как фоновый процесс (добавляя &
после него), например:
python -m SimpleHTTPServer 8888 &
Если окно терминала все еще открыто, вы можете сделать:
jobs
Получить список всех фоновых заданий в процессе запущенной оболочки.
Это может выглядеть так:
$ jobs
[1]+ Running python -m SimpleHTTPServer 8888 &
Чтобы убить работу, вы можете сделать kill %1
убить работу "[1]" или сделать fg %1
поставить задание на передний план (fg) и затем использовать ctrl-c, чтобы убить его. (Просто входя fg
поместит последний фоновый процесс на передний план).
По поводу SimpleHTTPServer похоже kill %1
лучше, чем fg
+ Ctrl-C. По крайней мере, это не протестует с командой kill.
Выше был протестирован в Mac OS, но, насколько я помню, он работает точно так же в Linux.
Обновление: чтобы это работало, веб-сервер должен быть запущен непосредственно из командной строки (дословно первый фрагмент кода). Использование скрипта для запуска сделает процесс недоступным для jobs
,
Это кажется излишним, но вы можете использовать http://supervisord.org/ для запуска и остановки вашего простого сервера Http и полностью управлять им как сервисом.
Или просто запустите его на переднем плане, как предложено, и убейте его с помощью кнопки управления
Нажав Ctrl + C один раз (дождаться отслеживания), затем снова нажав Ctrl + C, я добился цели:)
Вот еще одно решение.
Предположим, вы запустили сервер с помощью этой команды -
python3 -m http.server 7800
Чтобы убить этот процесс, используйте -
pkill -9 -f 'python3 -m http.server 7800
Вот и все.