Как закрыть 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> относительно чистые (и простой).
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.
надеюсь теперь понятно.
MYPORT=8888;
kill -9 `ps -ef |grep SimpleHTTPServer |grep $MYPORT |awk '{print }'`
вот оно !!
объясните командную строку:
ps -ef: список всех процессов.grep SimpleHTTPServer: процесс фильтрации, который принадлежит "SimpleHTTPServer"grep $MYPORT: фильтр снова Процесс принадлежит "SimpleHTTPServer", где порт-MYPORT (.Я. e: MYPORT=8888)awk '{print }': печать второго столбца результата, который является PID (идентификатор процесса)kill -9 <PID>: процесс принудительного убийства с соответствующим PID.
Это кажется излишним, но вы можете использовать руководитель для запуска и остановки simpleHttpserver и полного управления им как сервисом.
или просто запустите его на переднем плане, как предложено, и убейте его с помощью control C
оказывается, есть завершение работы, но это должно быть инициировано из другого потока.
Это решение сработало для меня:https://stackoverflow.com/a/22533929/573216
нажатие ctrl + c один раз(подождите traceback), затем снова нажмите ctrl+c, чтобы сделать трюк для меня:)
при запуске программы в качестве фонового процесса (путем добавления & после него), например:
python -m SimpleHTTPServer 8888 &
если окно терминала все еще открыт, вы можете сделать:
jobs
чтобы получить список всех фоновых заданий в процессе запущенной оболочки.
это может выглядеть так:
$ jobs
[1]+ Running python -m SimpleHTTPServer 8888 &
чтобы убить работу, вы можете сделать kill %1 убить Иова" [1]", или сделать fg %1 чтобы поместить задание на передний план (fg), а затем использовать ctrl-c, чтобы убить его. (Просто введите fg будет помещен последний backgrounded процесс на переднем плане).
в отношении SimpleHTTPServer кажется kill %1 лучше, чем fg + ctrl-c. По крайней мере, он не протестует против команды убить.
выше было протестировано в Mac OS, но, насколько я помню, он работает точно так же в Linux.
обновление: для этого веб-сервер должен быть запущен непосредственно из командной строки (дословно первый фрагмент кода). Использование скрипта для его запуска поставит процесс вне досягаемости jobs.