2013-01-19 18 views
9

Próbuję wysłać sygnał do serwera deweloperskiego Django, aby zabić proces nadrzędny i podrzędny.Odpowiedni sygnał do zabicia serwera deweloperskiego django

$ python manage.py runserver 
Validating models... 

0 errors found 
Django version 1.4.1, using settings 'myproject.settings' 
Development server is running at http://127.0.0.1:8000/ 
Quit the server with CONTROL-C. 

$ ps axf 
26077 pts/12 Ss  0:00 \_ -bash 
4189 pts/12 S+  0:00 | \_ python manage.py runserver 
4194 pts/12 Sl+ 0:00 |  \_ /myproject/.virtualenv/bin/python manage.py runserver 

$ kill -s SIGINT 4189 
$ ps axf 
4194 pts/12 Sl  0:00 /sh/myproject/.virtualenv/bin/python manage.py runserver 

Rozumiem, że SIGINT powinny emulować naciśnięcie Ctrl-C w terminalu, ale zauważ, że SIGINT przerywa rodzica, 4189, ale nie dziecko, 4194. samo zachowanie dla SIGKILL, SIGTERM, SIGSTOP. Używanie Ctrl-C z terminala zabija obydwa zgodnie z oczekiwaniami.

Czy istnieje sposób na zakończenie rodzica w sposób, który zabija dziecko bez znajomości PID dziecka?

Odpowiedz

6

Umieść kreskę przed procesem, to powinno zabić grupę procesów.

kill -s SIGINT -4189 
9

kill -9 4189

Spróbować, to powinno działać!

+0

"Czy istnieje sposób na zakończenie rodzica w sposób, w jaki również zabija dziecko? " Mam nadzieję, że pośrednio zabiję dziecko, zabijając tylko rodzica. Próbuję uruchomić serwer django pod kontrolą pakietu runit bez użycia --noreload. – Aaron

+0

@Aaron, Ta odpowiedź zadziałała, ale zaakceptowana odpowiedź nie – Gab

4

miałem podobny problem, ale przyjęte rozwiązanie nie działa na moim CentOS:

$ ps fx | grep [p]ython 
30864 pts/0 S  0:00 python manage.py runserver 0.0.0.0:80 
30866 pts/0 Sl  0:00 \_ /var/webapp/venv/bin/python manage.py runserver 0.0.0.0:80 
$ kill -s SIGINT -30864 
-bash: kill: 30864: invalid signal specification 

Tak, znalazłem to rozwiązanie:

$ pkill -P 30864 
$ ps fx | grep [p]ython 
$ # empty 
0

spróbuj pkill:

$ pkill -f "python3 manage.py runserver" 
Powiązane problemy