【解決方法】プロセスのサブプロセス生成を効果的にブロックし、アクセス許可を取り消すための戦略 (Python)

プログラミングQA

[ad_1]

プロセスが子を生成するのを防ぎ、そのアクセス許可を取り消す効果的な方法はありますか? プロセスがサブプロセスを生成する機能を完全にブロックし、可能であればそのアクセス許可を制限して、その子とともにプロセスを終了する堅牢なアプローチを探しています。 この目的のために効果的と思われる提案や戦略はありますか?

私が試したこと:

import psutil
import sys
import ctypes
import time<

def is_admin():
    try:
        return ctypes.windll.shell32.IsUserAnAdmin()
    except Exception as e:
        print(f'Error checking admin privileges: {e}')
        return False

def run_as_admin():
    try:
        ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, " ".join(sys.argv), None, 1)
    except Exception as e:
        print(f'Error restarting as administrator: {e}')
        sys.exit(1)

def block_child_creation(process_name):
    try:
        for process in psutil.process_iter(['pid', 'name']):
            if process.info['name'].lower() == process_name.lower():
                # Suspend the process
                process.suspend()
                print(f'The process with PID {process.pid} has been suspended.')

                # Terminate the process and its children
                for child in process.children(recursive=True):
                    child.kill()
                psutil.wait_procs(process.children(), timeout=5)
                process.kill()
                process.wait(5)
                print(f'The process with PID {process.pid} and its children have been terminated.')

                break  # No need to continue searching after blocking the process

        # Verificar novamente se o processo foi encerrado
        for process in psutil.process_iter(['pid', 'name']):
            if process.info['name'].lower() == process_name.lower():
                print(f'The process {process_name} is still running.')
            else:
                print(f'No process with the name {process_name}.')
                break
    except psutil.NoSuchProcess:
        print(f'No process with the name {process_name} found.')
    except Exception as e:
        print(f'An unexpected error occurred: {e}')

def main():
    try:
        if not is_admin():
            print("Restarting as administrator!")
            run_as_admin()

        global nome_processo
        nome_processo = input("Enter the name of the process you want to block and terminate with child creation: ")

        block_child_creation(nome_processo)

    except KeyboardInterrupt:
        print("\nTermination process interrupted by the user.")
    except Exception as e:
        print(f'An unexpected error occurred: {e}')

if __name__ == "__main__":
    main()

解決策 1

答えではなくアイデア

プロセスの作成をブロックするには、そのすべてのサブプロセスを繰り返し強制終了してみてください。
注: ユーザーのコンピュータに bsod (死のブルースクリーン) が表示されないように遅延を追加します。

それが機能しない場合、またはまだいくつかのプロセス/サブプロセスを残しておきたい場合は、次を試してください。
何かを調べようとしています。この回答が完了するまで待ってください。または、おそらく何か…

[ad_2]

コメント

タイトルとURLをコピーしました