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 に答える