Почему sysctl создает E_INVAL в Mac OS X?

Ниже приведен фрагмент кода C / Obj-C, который использует sysctl для получения argv конкретного процесса с PID 50.

...
int getProcessArgs[3] = { CTL_KERN, KERN_PROCARGS, 50 };
sysctl(getProcessArgs, 3, NULL, &length, NULL, 0);
char* processArgs = malloc(length * sizeof(char));
sysctl(getProcessArgs, 3, processArgs, &length, NULL, 0);
...

Первый вызов sysctl (для определения размера строкового массива argv) завершается успешно. Возвращенная длина ~ 1600, больше, чем я ожидал, но я полагаю, что это необоснованно. Маллок добивается успеха. Второй вызов sysctl возвращает -1, устанавливая errno равным 22, E_INVAL.

Я посмотрел на другой код, в том числе отэтот вопрос, но не вижу проблемы с моим. Что мне не хватает?

Ответы на вопрос(1)

Ваш ответ на вопрос