2016-10-24 3 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(), тот же, если я запрашиваю текущий процесс для его kp_eproc.e_ppid.
Я что-то не хватает?

ответ

2

не может получить информацию о других процессах, начиная с iOS 9. sysctl сейчас изолирован. Вы можете сделать это только в iDevice предыдущий iOS 9 или симулятор.

Sysctl() извлекает информацию о системе для процессов с соответствующими правами

IOS-приложения, которые не разрешены, чтобы увидеть, что другие приложения работает

В прошивке 9, песочница Теперь предотвращает процесс с сервера kern.proc, kern.procargs и kern.procargs2 значения для других процессов

см:

Смежные вопросы