2013-01-19 1 views
9

親プロセスと子プロセスを強制終了するシグナルをDjango開発サーバーに送信しようとしています。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、ではなく、子、SIGKILL、SIGTERM、SIGSTOPのため4194.同じ動作を終了していることに気づくべきであるということです。ターミナルからCtrl-Cを使用すると、両方が正常に終了します。

子のPIDを知らずに子を殺すような方法で親を終了する方法はありますか?

答えて

6

プロセスの前にダッシュを挿入すると、プロセスグループが強制終了されます。

kill -s SIGINT -4189 
9

kill -9 4189

それが動作するはず、試してみます!

+0

"親を終了させる方法はありますか?子供を殺す方法は? " 私は間接的に親を殺すことによって子供を殺すことを望んでいます。私は--noreloadを使わずにrunitスイートを使ってdjango devサーバを監視しようとしています。 – Aaron

+0

@Aaron、この回答は私のために働いたが、受け入れられた答えはなかった – Gab

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 
0

pkillを使用してみてください:

$ pkill -f "python3 manage.py runserver"