Как закрыть python simpleHTTPserver?



так что я пытаюсь узнать d3, и wiki предложил




для просмотра примеров локально, вы должны иметь локальный веб-сервер. Любой
веб-сервер будет работать; например, вы можете запустить встроенный 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> относительно чистые (и простой).

428   8  

8 ответов:

вы просто посылаете сигналы процессам. 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-это идентификатор python.

также по какой-то причине, если порт все еще открыт, вы можете закрыть порт с помощью этой команды

fuser -k 8888/tcp

здесь 8888-это tcp-порт, открытый python.

надеюсь теперь понятно.

или вы можете просто сделать kill %1, который убьет первое задание, поставленное в фоновом режиме

MYPORT=8888; 
kill -9 `ps -ef |grep SimpleHTTPServer |grep $MYPORT |awk '{print }'`

вот оно !!

объясните командную строку:

  • ps -ef : список всех процессов.

  • grep SimpleHTTPServer: процесс фильтрации, который принадлежит "SimpleHTTPServer"

  • grep $MYPORT: фильтр снова Процесс принадлежит к "SimpleHTTPServer", где порт является MYPORT (.т. е.: MYPORT=8888)

  • awk '{print }': печать второго столбца результата, который является PID (идентификатор процесса)

  • kill -9 <PID>: процесс принудительного убийства с соответствующим PID.

Это кажется излишним, но вы можете использовать руководитель чтобы запустить и остановить simpleHttpserver, и полностью управлять им как сервисом.

или просто запустите его на переднем плане, как было предложено, и убейте его с помощью control c

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

Это решение работало для меня:https://stackoverflow.com/a/22533929/573216

нажав ctrl + c один раз(подождите трассировки), а затем нажав ctrl + c снова сделал трюк для меня :)

при запуске программы в фоновом режиме (путем добавления & после него), например:

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-С. По крайней мере, это не протест команды Kill.

выше был протестирован в Mac OS, но, насколько я помню, он работает точно так же в Linux.

обновление: для этого веб-сервер должен быть запущен непосредственно из командной строки (дословно первый фрагмент кода). Использование скрипта для запуска поставит процесс вне досягаемости jobs.

Comments

    Ничего не найдено.