0

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 を返すため、エラーになることです。によって取得された親プロセス IDgetppid()は、現在のプロセスにそのkp_eproc.e_ppid.
何か不足していますか?

4

1 に答える 1

3

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

sysctl() は、適切な権限を持つプロセスのシステム情報を取得します

iOS アプリは、実行中の他のアプリを確認することを許可されていません

iOS 9 では、サンドボックスにより、プロセスが他のプロセスの kern.proc、kern.procargs、および kern.procargs2 値にアクセスできないようになりました。

見る:

于 2016-12-15T03:15:38.913 に答える