Как закрыть 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
.