Donc, j'essaie d'apprendre d3, et le wiki a suggéré que
Pour afficher les exemples localement, vous devez disposer d'un serveur Web local. Tout serveur Web fonctionnera. Par exemple, vous pouvez exécuter le serveur intégré de Python:
python -m SimpleHTTPServer 8888 &
Génial ... Seulement maintenant, j'ai un serveur en cours d'exécution ... mais à un moment donné, je pense que je devrais probablement arrêter de nouveau.
Existe-t-il un meilleur moyen de le désactiver que d'utiliser kill <pid>
? Cela ressemble à une sorte de gros marteau pour un petit travail.
(J'utilise Mac OS 10.6.8 (Snow Leopard))
FWIW: ctrl+c
donne environ 10 lignes de trace, se plaignant d’être interrompues.
kill -3 <pid>
donne un avertissement du Finder dans une fenêtre séparée 'Python se ferme inopinément'.
Le défaut kill <pid>
et kill -15 <pid>
sont relativement propres (et simples).
Vous envoyez simplement des signaux aux processus. kill
est une commande pour envoyer ces signaux.
La commande clavier Ctrl + C (⌃
+ C
) envoie un SIGINT, kill -9
envoie un SIGKILL et kill -15
envoie un SIGTERM.
Quel signal voulez-vous envoyer à votre serveur pour y mettre fin?
si vous avez démarré le serveur avec
python -m SimpleHTTPServer 8888
vous pouvez ensuite appuyer sur ctrl + c pour arrêter le serveur.
Mais si vous avez démarré le serveur avec
python -m SimpleHTTPServer 8888 &
ou
python -m SimpleHTTPServer 8888 & disown
il faut d'abord voir la liste pour tuer le processus,
commande d'exécution
ps
ou
ps aux | less
il va vous montrer un processus en cours comme ça ..
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
vous pouvez obtenir le PID à partir d'ici. et tuez ce processus en exécutant cette commande ..
kill -9 7247
ici 7247 est le python id.
Aussi, pour une raison quelconque, si le port est toujours ouvert, vous pouvez l'éteindre avec cette commande
fuser -k 8888/tcp
ici 8888 est le port tcp ouvert par python.
J'espère que c'est clair maintenant.
ou vous pouvez simplement faire kill %1
, qui supprimera le premier travail placé en arrière-plan
MYPORT=8888;
kill -9 `ps -ef |grep SimpleHTTPServer |grep $MYPORT |awk '{print $2}'`
C'est ça !!
ps -ef
: liste tous les processus.
grep SimpleHTTPServer
: processus de filtrage appartenant à "SimpleHTTPServer"
grep $MYPORT
: le nouveau filtrage appartient à "SimpleHTTPServer" où le port est MYPORT (.i.e: MYPORT = 8888)
awk '{print $2}'
: affiche la deuxième colonne du résultat qui correspond au PID (ID de processus)
kill -9 <PID>
: Forcer le processus de destruction avec le PID approprié.
Il s'avère qu'il y a un arrêt, mais cela doit être lancé à partir d'un autre thread.
Cette solution a fonctionné pour moi: https://stackoverflow.com/a/22533929/573216
Lorsque vous exécutez un programme en arrière-plan (en ajoutant un &
après), par exemple:
python -m SimpleHTTPServer 8888 &
Si la fenêtre du terminal est toujours ouverte, vous pouvez faire:
jobs
Pour obtenir une liste de tous les travaux en arrière-plan du processus en cours d'exécution du shell.
Cela pourrait ressembler à ceci:
$ jobs
[1]+ Running python -m SimpleHTTPServer 8888 &
Pour tuer un travail, vous pouvez soit faire kill %1
tuer le travail "[1]", ou bien faire fg %1
pour placer le travail au premier plan (fg), puis utilisez ctrl-c pour le supprimer. (Il suffit d'entrer fg
pour placer le dernier processus d'arrière-plan au premier plan).
En ce qui concerne SimpleHTTPServer, il semble que kill %1
est meilleur que fg
+ ctrl-c. Au moins, il ne proteste pas avec la commande kill.
Ce qui précède a été testé sous Mac OS, mais autant que je sache, il fonctionne de la même manière sous Linux.
pdate: Pour que cela fonctionne, le serveur Web doit être démarré directement à partir de la ligne de commande (mot à mot le premier extrait de code). Utiliser un script pour le lancer mettra le processus hors de portée de jobs
.
Cela semble excessif, mais vous pouvez utiliser superviseur pour démarrer et arrêter votre simpleHttpserver, et le gérer complètement en tant que service.
Ou simplement l'exécuter au premier plan comme suggéré et le tuer avec le contrôle c
Frapper ctrl + c une fois (attendre traceback), puis frapper ctrl + c a encore fait le tour pour moi :)