杀死django开发服务器的适当信号

我试图发送一个信号到django开发服务器来杀死父进程和subprocess。

$ 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 

我的理解是,SIGINT应该仿效在terminal中按下Ctrl-C,但注意到SIGINT终止父母,4189,而不是孩子,4194。SIGKILL,SIGTERM,SIGSTOP的相同行为。 按照预期使用terminal中的Ctrl-C。

有没有办法以不知道孩子的PID的方式杀死孩子?

在进程前面放一个破折号,这应该杀死进程组。

  kill -s SIGINT -4189 

kill -9 4189

有一个尝试,它应该工作!

我有类似的问题,但接受的答案没有在我的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 

所以,我找到了这个解决方案:

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

尝试使用pkill

 $ pkill -f "python3 manage.py runserver"