2016-10-24 5 views
0

iOS上で実行時にいくつかのプロセス情報、特に親プロセス名を取得しようとしています。 現在のプロセス名を取得することはできますが、その親に対しても同じことをすることはできないようです。ここ
は私がやっているものです:iOSアプリケーションで実行時に親プロセス情報を取得

static inline bool is_debugserver_present() { 
    int     err; 
    int     mib[4]; 
    struct kinfo_proc info; 
    size_t    size; 

    // Initialize the flags so that, if sysctl fails for some bizarre 
    // reason, we get a predictable result. 

    info.kp_proc.p_flag = 0; 

    // Initialize mib, which tells sysctl the info we want, in this case 
    // we're looking for information about a the parent process ID. 

    mib[0] = CTL_KERN; 
    mib[1] = KERN_PROC; 
    mib[2] = KERN_PROC_PID; 
    mib[3] = getppid(); 

    // Call sysctl. 

    size = sizeof(info); 
    int n = sizeof(mib)/sizeof(*mib); 
    err = sysctl(mib, n, &info, &size, NULL, 0); 

    return (strncmp(info.kp_proc.p_comm, "launchd", sizeof("launchd") - 1) != 0); 
} 

問題がsysctlへの呼び出しは常に返すことを-1ので、エラーです。 getppid()で取得された親プロセスIDは、現在のプロセスのkp_eproc.e_ppidに問い合わせても同じです。
何か不足していますか?

答えて

2

は、iOS 9以来の他のプロセスの情報を取得できません。sysctlは現在サンドボックスされています。これはiOSデバイス以前のiOS 9またはシミュレータでのみ実行できます。

のsysctl()

iOSアプリケーションが他のアプリケーションは、IOSの9において

を実行しているかを確認することが許可されていない適切な権限を持つプロセスのためのシステム情報を取得し、サンドボックスは、現在アクセスするプロセスを妨げますkern.proc、 kern.procargs、および他のプロセスのためのkern.procargs2値

参照:

関連する問題