¿Cómo apago un python simpleHTTPserver?

Así que estoy tratando de aprender d3, y la wiki sugirió que

Para ver los ejemplos localmente, debe tener un servidor web local. Cualquier servidor web funcionará; por ejemplo, puede ejecutar el servidor incorporado de Python:

python -m SimpleHTTPServer 8888 &

Genial … solo que ahora tengo un servidor en funcionamiento … pero en algún momento creo que probablemente debería apagarlo nuevamente.

¿Hay una mejor manera de apagarlo que usar kill ? Eso parece una especie de gran martillo para un pequeño trabajo.

(Estoy ejecutando Mac OS 10.6.8 (Snow Leopard))

FWIW: ctrl+c proporciona aproximadamente 10 líneas de rastreo, quejándose de haber sido interrumpido.

kill -3 muestra una advertencia del Finder en una ventana separada ‘Python se cerró inesperadamente’.

Los kill predeterminados de kill y kill -15 son relativamente limpios (y simples).

Simplemente estás enviando señales a los procesos. kill es un comando para enviar esas señales.

El comando del teclado Ctrl + C ( + C ) envía un SIGINT, kill -9 envía un SIGKILL, y kill -15 envía un SIGTERM.

¿Qué señal quieres enviar a tu servidor para finalizarla?

Si has iniciado el servidor con

 python -m SimpleHTTPServer 8888 

luego puede presionar ctrl + c para descargar el servidor.

Pero si has iniciado el servidor con

 python -m SimpleHTTPServer 8888 & 

o

 python -m SimpleHTTPServer 8888 & disown 

tienes que ver la lista primero para matar el proceso,

ejecutar comando

 ps 

o

 ps aux | less 

te mostrará un proceso en ejecución como este …

 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 

Puedes obtener el PID desde aquí. y mata ese proceso ejecutando este comando …

 kill -9 7247 

aquí 7247 es el id de python.

También por alguna razón, si el puerto sigue abierto, puede cerrar el puerto con este comando

fuser -k 8888/tcp

Aquí 8888 es el puerto TCP abierto por Python.

Espero que esté claro ahora.

o simplemente puede kill %1 , lo que matará el primer trabajo puesto en segundo plano

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

Eso es !!

Explicar línea de comando:

  • ps -ef : listar todo el proceso.

  • grep SimpleHTTPServer : proceso de filtro que pertenece a “SimpleHTTPServer”

  • grep $MYPORT : el proceso del filtro de nuevo pertenece a “SimpleHTTPServer” donde el puerto es MYPORT (.ie: MYPORT = 8888)

  • awk '{print $2}' : imprime la segunda columna del resultado, que es el PID (ID de proceso)

  • kill -9 : Forzar el proceso de kill -9 con el PID apropiado.

Resulta que hay un apagado, pero esto debe iniciarse desde otro hilo.

Esta solución funcionó para mí: https://stackoverflow.com/a/22533929/573216

Parece una exageración, pero puedes usar supervisor para iniciar y detener tu simpleHttpserver, y administrarlo completamente como un servicio.

O simplemente ejecútelo en primer plano como se sugiere y elimínelo con el control c

Cuando ejecuta un progtwig como un proceso en segundo plano (agregando un & después de él), por ejemplo:

 python -m SimpleHTTPServer 8888 & 

Si la ventana del terminal aún está abierta, puedes hacer:

 jobs 

Para obtener una lista de todos los trabajos en segundo plano dentro del proceso del shell en ejecución.

Podría verse así:

 $ jobs [1]+ Running python -m SimpleHTTPServer 8888 & 

Para eliminar un trabajo, puede kill %1 para eliminar el trabajo “[1]”, o fg %1 para poner el trabajo en primer plano (fg) y luego usar ctrl-c para eliminarlo. (Simplemente ingresando fg pondrá el último proceso en segundo plano en primer plano).

Con respecto a SimpleHTTPServer, parece que kill %1 es mejor que fg + ctrl-c. Al menos no protesta con la orden de matar.

Lo anterior se ha probado en Mac OS, pero, por lo que puedo recordar, funciona igual en Linux.

Actualización: para que esto funcione, el servidor web debe iniciarse directamente desde la línea de comandos (literalmente el primer fragmento de código). El uso de un script para iniciarlo pondrá el proceso fuera del scope de los jobs .

Golpear ctrl + c una vez (esperar el rastreo), luego presionar ctrl + c otra vez hizo el truco para mí 🙂