web-dev-qa-db-ja.com

再起動し続けるプロセスを強制終了します

「kill -9」が機能しない場合はどうなりますか? または 新しいプロセスを開始するスクリプトを強制終了する方法? とにかく役に立ちません。

私はpythonスクリプトが同じポートを使用して別のプロセスIDで自動的に開始する殺されたときSudo kill -9 <pid>を使用。

$ lsof -i :3002
COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
python  13242 ubuntu    3u  IPv4  64592      0t0  TCP localhost:3002 (LISTEN)
$ Sudo kill -9 13242
$ lsof -i :3002
COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
python  16106 ubuntu    3u  IPv4  74792      0t0  TCP localhost:3002 (LISTEN)
$ Sudo kill 16106
$ lsof -i :3002
COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
python  16294 ubuntu    3u  IPv4  75677      0t0  TCP localhost:3002 (LISTEN)

ゾンビプロセスではありません。

$ ps -Al

4 S     0 16289     1  0  80   0 - 12901 poll_s ?        00:00:00 Sudo
4 S  1000 16293 16289  0  80   0 -  1100 wait   ?        00:00:00 sh
0 S  1000 16294 16293  0  80   0 - 34632 poll_s ?        00:00:00 python

私は運が悪くてもSudo pkill -f <processname>を試しました。死にたくない。

更新:

その親プロセスはshであり、その親はSudoです。上記の表に記載されています。これらを突然殺しても安全かどうかはわかりません。また、これは共有Ubuntuサーバーです。

で自動的に開始する別のプロセスIDは、別のプロセスであることを意味します。したがって、その子を監視する親プロセスがあり、1つが死んだ場合、親によって再生成されます。サービスを完全に停止したい場合は、親プロセスを停止する方法を調べてください。 SIGKILLでそれを殺すことはもちろんオプションの1つですが、おそらく正しいものではありませんTM、適切にシャットダウンするには、サービスモニターがクリーンアップを行う必要がある場合があるためです。

監視プロセスを見つけるには、実際のリスナーが(通常はfork() + setsid()コンボによって)親から切り離される可能性があるため、プロセスリスト全体を検査する必要がある場合があります。この場合、ps fauxの出力(少なくともprocpsから、他の実装では異なる場合があります)が便利です。すべてのプロセスが階層ツリーにリストされます。 PID wrap がない限り( wikipedia も参照)、モニターのPIDはリスナーのPIDよりも小さくする必要があります(もちろん、PID-wraparoundにヒットしない限り) )。

26
peterph

プロセスのリスニングポートがわかっている場合は、-kフラグを指定してfuserを使用できます。

何かのようなもの、

fuser -k 3002/tcp
4
Ramesh