std::cout << "I am a process :" << getpid() << std::endl;
sleep(1);
}
return 0;
}
复制代码
多进程程序内的进程属于一个进程组吗?
#include <iostream>
#include <string>
#include <unistd.h>
int main()
{
pid_t id = fork();
if (id == 0)
{
while (true)
{
std::cout << "I am a child process :" << getpid() << std::endl;
sleep(1);
}
}
sleep(3);
std::cout << "I am a parent process :" << getpid() << std::endl;
sleep(100);
return 0;
}
复制代码
只要某个进程组中有一个进程存在, 则该进程组就存在, 这与其组长进程是否已经终止无关。验证代码:
#include <iostream>
#include <string>
#include <unistd.h>
int main()
{
pid_t id = fork();
if (id == 0)
{
while (true)
{
std::cout << "I am a child process :" << getpid() << std::endl;
sleep(1);
}
}
sleep(3);
std::cout << "I am a parent process :" << getpid() << std::endl;
exit(0);
return 0;
}
复制代码
进程的标识符
每个进程都有一个现实用户标识符(Real User ID,RUID)和一个现实组标识符(Real Group ID,RGID)。
进程的有效用户标识符(Effective User ID,EUID) 和 有效组标识符(Effective Group ID,EGID) 也许更重要些,它们被用来确定一个用户能否访问某个确定的文件。在通常情况下,它们与现实用户标识符和现实组标识符是同等的。但是,一个进程或其先人进程可以设置程序文件的置用户标识符权限或置组标识符权限。如许,当通过 exec 调用实行该程序时,其进程的有效用户标识符就取自该文件的文件主的有效用户标识符,而不是启动该进程的用户的有效用户标识符。
在Unix/Linux操作体系中,进程的身份验证和权限检查主要基于以下四个标识符:
现实用户标识符(Real User ID, RUID):标识启动进程的现实用户。
现实组标识符(Real Group ID, RGID):标识启动进程的现实用户所属的组。
有效用户标识符(Effective User ID, EUID):用于权限检查,确定用户对文件和其他资源的访问权限。
有效组标识符(Effective Group ID, EGID):与EUID类似,用于权限检查,确定用户所属组对文件和其他资源的访问权限。