模块 Process::Sys

The Process::Sys 模块包含 UIDGID 函数,这些函数提供与同名系统调用的直接绑定,而不是在 ProcessProcess::UIDProcess::GID 模块中找到的相同功能的更可移植版本。

公共类方法

egid → integer 点击切换源代码
Process::GID.eid → integer
Process::Sys.geteid → integer

返回当前进程的有效组 ID

Process.egid # => 500

并非所有平台都可用。

static VALUE
proc_getegid(VALUE obj)
{
    rb_gid_t egid = getegid();

    return GIDT2NUM(egid);
}
euid → integer 点击切换源代码
Process::UID.eid → integer
Process::Sys.geteuid → integer

返回当前进程的有效用户 ID。

Process.euid # => 501
static VALUE
proc_geteuid(VALUE obj)
{
    rb_uid_t euid = geteuid();
    return UIDT2NUM(euid);
}
gid → integer 点击切换源代码
Process::GID.rid → integer
Process::Sys.getgid → integer

返回当前进程的(真实)组 ID

Process.gid # => 1000
static VALUE
proc_getgid(VALUE obj)
{
    rb_gid_t gid = getgid();
    return GIDT2NUM(gid);
}
uid → integer 点击切换源代码
Process::UID.rid → integer
Process::Sys.getuid → integer

返回当前进程的(真实)用户 ID。

Process.uid # => 1000
static VALUE
proc_getuid(VALUE obj)
{
    rb_uid_t uid = getuid();
    return UIDT2NUM(uid);
}
Process::Sys.issetugid → true 或 false 点击切换源代码

如果进程是作为 execve(2) 系统调用的结果创建的,并且该系统调用设置了 setuid 或 setgid 位(并且因此获得了额外的权限),或者如果它在开始执行后更改了其任何真实、有效或保存的用户或组 ID,则返回 true

static VALUE
p_sys_issetugid(VALUE obj)
{
    return RBOOL(issetugid());
}
Process::Sys.setegid(group) → nil 点击切换源代码

Set 调用进程的有效组 ID 为 group。并非所有平台都可用。

static VALUE
p_sys_setegid(VALUE obj, VALUE id)
{
    check_gid_switch();
    if (setegid(OBJ2GID(id)) != 0) rb_sys_fail(0);
    return Qnil;
}
Process::Sys.seteuid(user) → nil 点击切换源代码

Set 调用进程的有效用户 ID 为 user。并非所有平台都可用。

static VALUE
p_sys_seteuid(VALUE obj, VALUE id)
{
    check_uid_switch();
    if (seteuid(OBJ2UID(id)) != 0) rb_sys_fail(0);
    return Qnil;
}
Process::Sys.setgid(group) → nil 点击切换源代码

Set 当前进程的组 ID 为 group。并非所有平台都可用。

static VALUE
p_sys_setgid(VALUE obj, VALUE id)
{
    check_gid_switch();
    if (setgid(OBJ2GID(id)) != 0) rb_sys_fail(0);
    return Qnil;
}
Process::Sys.setregid(rid, eid) → nil 点击切换源代码

将当前进程的(组)真实和/或有效组 ID 分别设置为 rideid。对于任一 ID,值 -1 表示保持该 ID 不变。并非所有平台都支持此方法。

static VALUE
p_sys_setregid(VALUE obj, VALUE rid, VALUE eid)
{
    rb_gid_t rgid, egid;
    check_gid_switch();
    rgid = OBJ2GID(rid);
    egid = OBJ2GID(eid);
    if (setregid(rgid, egid) != 0) rb_sys_fail(0);
    return Qnil;
}
Process::Sys.setresgid(rid, eid, sid) → nil 点击切换源代码

将当前进程的(组)真实、有效和保存的用户 ID 分别设置为 rideidsid。对于任何值,值 -1 表示保持该 ID 不变。并非所有平台都支持此方法。

static VALUE
p_sys_setresgid(VALUE obj, VALUE rid, VALUE eid, VALUE sid)
{
    rb_gid_t rgid, egid, sgid;
    check_gid_switch();
    rgid = OBJ2GID(rid);
    egid = OBJ2GID(eid);
    sgid = OBJ2GID(sid);
    if (setresgid(rgid, egid, sgid) != 0) rb_sys_fail(0);
    return Qnil;
}
Process::Sys.setresuid(rid, eid, sid) → nil 点击切换源代码

将当前进程的(用户)真实、有效和保存的用户 ID 分别设置为 rideidsid。对于任何值,值 -1 表示保持该 ID 不变。并非所有平台都支持此方法。

static VALUE
p_sys_setresuid(VALUE obj, VALUE rid, VALUE eid, VALUE sid)
{
    rb_uid_t ruid, euid, suid;
    PREPARE_GETPWNAM;
    check_uid_switch();
    ruid = OBJ2UID1(rid);
    euid = OBJ2UID1(eid);
    suid = OBJ2UID1(sid);
    FINISH_GETPWNAM;
    if (setresuid(ruid, euid, suid) != 0) rb_sys_fail(0);
    return Qnil;
}
Process::Sys.setreuid(rid, eid) → nil 点击切换源代码

将当前进程的(用户)真实和/或有效用户 ID 分别设置为 rideid。对于任一 ID,值 -1 表示保持该 ID 不变。并非所有平台都支持此方法。

static VALUE
p_sys_setreuid(VALUE obj, VALUE rid, VALUE eid)
{
    rb_uid_t ruid, euid;
    PREPARE_GETPWNAM;
    check_uid_switch();
    ruid = OBJ2UID1(rid);
    euid = OBJ2UID1(eid);
    FINISH_GETPWNAM;
    if (setreuid(ruid, euid) != 0) rb_sys_fail(0);
    return Qnil;
}
Process::Sys.setrgid(group) → nil 点击切换源代码

Set 将调用进程的真实组 ID 设置为 group。并非所有平台都支持此方法。

static VALUE
p_sys_setrgid(VALUE obj, VALUE id)
{
    check_gid_switch();
    if (setrgid(OBJ2GID(id)) != 0) rb_sys_fail(0);
    return Qnil;
}
Process::Sys.setruid(user) → nil 点击切换源代码

Set 将调用进程的真实用户 ID 设置为 user。并非所有平台都支持此方法。

static VALUE
p_sys_setruid(VALUE obj, VALUE id)
{
    check_uid_switch();
    if (setruid(OBJ2UID(id)) != 0) rb_sys_fail(0);
    return Qnil;
}
Process::Sys.setuid(user) → nil 点击切换源代码

Set 将当前进程的用户 ID 设置为 user。并非所有平台都支持此方法。

static VALUE
p_sys_setuid(VALUE obj, VALUE id)
{
    check_uid_switch();
    if (setuid(OBJ2UID(id)) != 0) rb_sys_fail(0);
    return Qnil;
}