2012-04-16 22 views
4

私は自分自身を終了する場合は、[NSApp terminate: nil]を使用してください、それは非常にうまく動作します。しかし、アクティブなモニターなどの別のプロセスを終了したい場合、どうしたらよいですか? ココアでプロセスを終了

は、私は右の私

NSArray* processlist = [[NSWorkspace sharedWorkspace] runningApplications]; 

アムを使用するプロセスのリストを取得するには?しかし、私はココアでプロセスを終了するには、killまたはKillProcess(<#const ProcessSerialNumber *inProcess#>)またはkillpdなどを使用しないで、ちょうどCocoaを習得し始めます。そのため、サンプルコードやいくつかのキーワードが必要です。ご協力ありがとうございました。

答えて

5

-[NSWorkspace runningApplications]は、NSRunningApplicationのオブジェクトの配列を返します。 NSRunningApplicationは、方法-[NSRunningApplication terminate]を有する。ですから、特定のアプリケーションを探しているなら、あなたはこのようにそれを終了することができます:

-(void)killProcessesNamed:(NSString*)appName 
{ 
    for (id app in [[NSWorkspace sharedWorkspace] runningApplications]) 
    { 
     if ([appName isEqualToString:[[app executableURL] lastPathComponent]]) 
     { 
      [app terminate]; 
     } 
    } 
} 

また、通常の辞職プロセスなしに終了するアプリを強制的にforceTerminateを呼び出すことができます。 (変更を保存するかどうかを尋ねることはありません)

NSRunningApplicationの他の方法があります。バンドルIDまたはPIDに基づいてプロセスを検索するかどうかによって、このプロセスを簡単にすることができます。

+0

マイナーあけせくするが、([appNameのisEqualToString:[アプリexecutableURL] lastPathComponent]] == YES)場合 ' はない:[アプリexecutableURL] lastPathComponent] ' IF([appNameのisEqualToStringに相当 ' ]) ' ? –

+0

ええ、それは明らかに同じ全く同じことをします。 –

+0

ありがとうございます。私はそれを見ます[リンク](https://developer.apple.com/library/mac/#documentation/AppKit/Reference/NSRunningApplication_Class/Reference/Reference.html#//apple_ref/occ/cl/NSRunningApplication)を参照してください。なぜ、私はプロセスを比較するためにこれに頼ることができないのか分かりませんし、同じ名前のプロセスがワークスペース内で実行されている場合、どうすればいいですか? – RetVal

関連する問題