私が作成したのではなく、CPU の負荷が高く不安定なプロセスを生成して通信するプログラムがあります。アプリがクラッシュSIGKILL
したり、.
このトピックが以前に取り上げられたことは知っていますが、説明されているすべての方法を試しましたが、どれもテストに耐えられないようです.
端末は常にそれを行うので、それが可能でなければならないことを私は知っています。端末で何かを実行して端末を強制終了すると、常に端末が停止します。
atexit
私はダブルフォークとを試しptys
ました。atexit
には機能しませんsigkill
。ダブルフォークはまったく機能しません。Pythonをptys
使用して作業する方法が見つかりませんでした。
今日、私は について知りましたprctl(PR_SET_PDEATHSIG, SIGKILL)
。これは、親プロセスが終了したときに、子プロセスが自分自身を強制終了する方法であるべきです。で使用しようとしましたpopen
が、まったく効果がないようです。
import ctypes, subprocess
libc = ctypes.CDLL('/lib/libc.so.6')
PR_SET_PDEATHSIG = 1; TERM = 15
implant_bomb = lambda: libc.prctl(PR_SET_PDEATHSIG, TERM)
subprocess.Popen(['gnuchess'], preexec_fn=implant_bomb)
上記では、子が作成され、親が終了します。gnuchess
今、あなたはa を受け取って死ぬことを期待するでしょうがSIGKILL
、そうではありません。100% の CPU を使用しているプロセス マネージャーでまだ見つけることができます。
私の ? の使用に何か問題があるかどうか誰か教えてもらえますprctl
か? または、端末がどのように子供たちを殺すことができるか知っていますか?