task_for_pid всегда возвращает (os / kern) сбой на дарвине в C - PullRequest
2 голосов
/ 12 июля 2011

По некоторым причинам я не могу получить что-либо из task_for_pid (). Я не могу найти очень много информации, но то, что я пытаюсь сделать, это присоединить к другому процессу и найти его память, но каждый раз, когда я пытаюсь использовать task_for_pid, Я получаю ту же ошибку (os / kern).

#include <stdio.h>
#include <mach/mach_traps.h>
#include <mach/mach_init.h>

int main(int argc, char* argv[])
{
mach_port_name_t task;
printf("%d\n", argv[1]);
int pid = atoi(argv[1]);
printf("%d\n%d\n", pid, current_task());
int error = task_for_pid(2055, 24269, &task);
printf("%x\n", task);
if (error)
{
printf("task_for_pid return error:\n %s\n", mach_error_string(error));
} else {
printf("Get the process %d's task port : %x\n", pid, task);
}
return 0;
}

Вывод выглядит так:

gcc -o test test.c;./test 24269
803206115
24269
2055
0
task_for_pid return error:
 (os/kern) failure

Есть какие-нибудь идеи относительно того, почему я не получаю задачу, никогда?Я запускаю его с правами root.

Как сказал Адам Розенфилд, в заголовке говорится, что он устарел, но если это правда, могу ли я все же скомпилировать и запустить его с более старой версией набора инструментов?или чем оно было заменено?кто-нибудь знает?

1 Ответ

2 голосов
/ 13 июля 2011
  1. Вы уверены, что работаете с правами root?
  2. Вы уверены, что процесс 24269 все еще выполняется?

У меня нет проблем с запуском этого кода (с помощью sudo) в Mac OS X 10.6.8 с любым запущенным процессом:

#include <stdio.h>
#include <stdlib.h>
#include <mach/mach_traps.h>
#include <mach/mach_init.h>
#include <mach/mach_error.h>

int main(int argc, char* argv[])
{
    task_t task;
    pid_t pid = argc >= 2 ? atoi(argv[1]) : 1;
    kern_return_t error = task_for_pid(current_task(), pid, &task);
    printf("%d -> %x [%d - %s]\n", pid, task, error, mach_error_string(error));
    return error;
}

Например, вот мой результат с pid 182 (Dock)

$ sudo ./task_for_pid 182
182 -> 413 [0 - (os/kern) successful]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...