7

名前と所有者に基づいてプロセスを強制終了するコードを書きたいと思っています。これは Windows XP では問題なく動作しますが、Windows 7 で同じコードを実行しようとすると、プロセスのユーザー名を取得しようとするとアクセス拒否エラーが発生します。

XP と Win7 で動作するプロセスを強制終了する簡単な方法はありますか?

プロセスが「システム」によって所有されているかどうかを確認するチェックが実際に必要であるため、システムプロセスが残っているため、プロセスにユーザープロセスがいつ終了したかを確認できます。これには関係ありません。

PROCNAME = 'python.exe'
for proc in psutil.process_iter():
  if proc.name == PROCNAME:
    p = psutil.Process(proc.pid)
  
    if not 'SYSTEM' in p.username:
      proc.kill()
4

5 に答える 5

1

2010 年 10 月から ( 114 号を参照)、usernameC 関数呼び出しを使用して取得get_process_usernameされます (ソースを参照)

これは、この以前のスタックオーバーフローの質問で説明されている問題に悩まされていることを意味します

基本的に、例外をキャッチしてAccessDenied、ユーザーが「SYSTEM」または「LOCAL SERVICE」のいずれかであると想定できます

編集:私が見たところでは、本来あるべきよりも多くの AccessDenied エラーを引き起こす Python のバグもあります。SetSeDebug最後にpsutilの関数が呼び出さRevertToSelfれ、実行したすべての変更が実質的に元に戻されます。

于 2012-08-22T15:31:54.843 に答える