2013-08-06 2 views
3

Длинный ответ на мой собственный вопрос, имея Google Googled и не нашел ничего полезного, - это просеивать источник «ps». Но прежде чем я это сделаю, есть ли кто-нибудь, кто хочет предоставить решение ленивого человека? :-)Есть ли системный вызов для получения uid/gid текущего процесса?

Я нашел этот вопрос: Knowing the process status using procf/<pid>/status Однако решение, похоже, не доступно на ядре 3.2. Является ли этот тип pstatus_t доступным для новых ядер? Если это так, означает ли это, что более новые ядра предоставляют двоичный интерфейс для/proc // status?

+0

/Proc/Я/статус будет казаться хорошим кандидатом, но что, если/прок не установлен ? – Craig

+0

Вы хотите его для текущего процесса или для любого другого процесса, учитывая pid? –

+1

Не текущий процесс, процесс основан на pid. Игнорируйте/proc/self, это была просто перенос мыслей командной строки в ramblings. Я на самом деле имел в виду/proc//status. – Craig

ответ

2

В настоящее время единственное жизнеспособное решение, которое я могу придумать, - это что-то вроде этого. Очевидно, что не пошел в усилие, чтобы увидеть, если это на самом деле работает, как я бы ожидать, что она все же ...:

int len, pid, n, fd = open("/proc/12345/status", O_RDONLY | O_NOATIME); 
char buf[4096], whitespace[50]; 

if (0 < (len = read(fd, buf, 4096))) 
{ 
    n = sscanf(buf, "Uid:%s%d ", whitespace, &pid); 
} 
+0

было бы проще просто «статизировать» каталог '/ proc/pid' и читать значения st_uid и st_gid? – Petesh

+0

Это нормально для получения «настоящего» uid и gid. Это не даст вам эффекта или fs, и это, безусловно, не даст вам дополнительных групп. – Craig

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