0

在 AFS(安德鲁文件系统)中,可以将单独的进程放入不同的 PAG 中,我的问题是:如何以编程方式获取某个进程的 PAG 编号?谢谢。

4

1 回答 1

1

您可以通过调用 VIOC_GETPAG pioctl 在 C 程序中执行此操作,最初由 Russ Allbery在此处发布:

#include <stdio.h>
#include <afs/param.h>
#include <afs/afssyscalls.h>
#include <afs/vice.h>
#include <afs/vioc.h>

int
main(void)
{
    struct ViceIoctl iob;
    afs_uint32 pag;
    int code;

    iob.in = NULL;
    iob.in_size = 0;
    iob.out = (void *) &pag;
    iob.out_size = sizeof(pag);
    code = pioctl(NULL, VIOC_GETPAG, &iob, 0);
    if (code != 0) {
        fprintf(stderr, "Cannot get PAG\n");
        return 1;
    }
    printf("PAG number is: %lu\n", (unsigned long) pag);
    return 0;
}

(还)没有官方接口可以在 C 程序之外获取 PAG 编号;比如说,通过运行一些命令。大多数情况下,您可以通过查看当前进程的补充组列表并查找编号非常高的组来确定 PAG 编号。但是,虽然目前这主要“有效”,但在某些情况下,此信息可能不正确,并且不能保证将来适用于所有平台。具体来说,在现代 Linux 上,PAG 编号的权威位置在内核密钥环中,提供组 id 只是“尽力而为”,将来可能会消失。

于 2014-05-10T21:38:40.580 回答