首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >地球机器人指的是哪里?

地球机器人指的是哪里?
EN

Stack Overflow用户
提问于 2017-09-03 07:17:49
回答 1查看 919关注 0票数 3

我有一个关于linux中的getuid()geteuid()的问题。我知道getuid将返回当前进程的真实用户id。此外,geteuid()将返回当前进程的有效用户id。

我的问题是,关于id的信息存储在哪里。除了/etc/passwd之外,我认为每个进程都应该在某个地方存储自己的id信息。

如果我是对的,请告诉我信息存储在哪里(比如堆叠一样的区域)。如果我错了,这个过程如何得到它的id?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-03 07:29:48

这是内核在其内部内存结构中维护的东西。

Linux内核使用名为struct task_struct的东西。

Linux下的每个进程都被动态分配一个struct task_struct结构。

在Linux内核4.12.10中,定义如下:

struct.h

代码语言:javascript
运行
复制
struct task_struct {
    ...
    /* Objective and real subjective task credentials (COW): */
    const struct cred __rcu     *real_cred;

    /* Effective (overridable) subjective task credentials (COW): */
    const struct cred __rcu     *cred;

cred.h

代码语言:javascript
运行
复制
struct cred {
    ...
    kuid_t      uid;        /* real UID of the task */
    kgid_t      gid;        /* real GID of the task */
    kuid_t      suid;       /* saved UID of the task */
    kgid_t      sgid;       /* saved GID of the task */
    kuid_t      euid;       /* effective UID of the task */
    kgid_t      egid;       /* effective GID of the task */
    kuid_t      fsuid;      /* UID for VFS ops */
    kgid_t      fsgid;      /* GID for VFS ops */

用户空间进程不能直接访问这些结构。要获取此信息,此类进程必须使用系统调用(如getuid()geteuid())或/proc文件系统。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46021135

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档