root として (SMJobBless によって祝福された) 特権ヘルパー ツールを実行しており、Finder のプロセス ID を取得しようとしています。以下のコードは OS X 10.8 では問題なく動作しますが、10.7 では finderApps に対して空の配列を返します。
XCodeのSchemesの下にある「Debug Process As」オプションで「root」を選択することにより、10.7を実行している2つの異なるマシンで問題を再現しました。奇妙なことに、「sudo myTestApp」を使用して直接呼び出すと、コードは正常に機能します。
デーモン プロセスとして直接起動したり、XCode でルートとしてデバッグしたりすると、コードを実行できない理由はありますか?
int main(int argc, const char * argv[])
{
NSArray *finderApps = [NSRunningApplication runningApplicationsWithBundleIdentifier:@"com.apple.finder"];
if ([finderApps count] == 0)
{
NSLog(@"failed to find Finder");
return -1;
}
NSRunningApplication *finderApplication = [finderApps objectAtIndex:0];
pid_t process_id = [finderApplication processIdentifier];
NSLog(@"succeeded with procid: %d", process_id);
return 0;
}