私が作成したのではなく、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か? または、端末がどのように子供たちを殺すことができるか知っていますか?