9

我正在尝试向 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

我的理解是 SIGINT 应该模拟在终端中按 Ctrl-C,但请注意 SIGINT 会终止父级 4189,而不是子级 4194。SIGKILL、SIGTERM、SIGSTOP 的行为相同。从终端使用 Ctrl-C 会按预期杀死两者。

有没有办法在不知道孩子 PID 的情况下以杀死孩子的方式终止父母?

4

4 回答 4

9

kill -9 4189

试一试,它应该工作!

于 2013-01-22T03:08:46.130 回答
7

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

 kill -s SIGINT -4189
于 2013-12-05T13:58:40.810 回答
4

我有类似的问题,但接受的答案在我的 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 
于 2015-05-11T12:16:39.720 回答
0

尝试使用pkill

$ pkill -f "python3 manage.py runserver"
于 2017-11-09T04:35:28.613 回答