用户和组ID
与进程相关的用户ID有四个:真实的、有效的、被保存的、文件系统的用户ID。
- 真实的ID是指启动进程的用户的ID。
- 有效用户ID是指正在运行的进程的用户ID。
- 被保存的ID是进程最初的有效用户ID。
有效用户ID最重要,是确认进程凭证期间所检查的用户ID,真实ID和被保存的ID可作为替代品。root用户可以给uid提供任何值,但是普通用户只能提供真实ID或者被保存的用户ID。下面是和各种ID相关的方法,不详细:
int main(){
printf("uid:%d\n", (int)getuid());
printf("pid:%d\n", (int)getpid());
printf("sid:%d\n", (int)getsid(getpid()));
return 0;
}
在制造守护进程的时候会用到这方面的东西,下面给出一个创建守护进程的例子:
int main(){
pid_t pid;
int i ;
pid = fork();
if(pid == -1){
return -1;
}else if(pid != 0){
exit(EXIT_SUCCESS);
}
//创建新的会话以及进程组
if(setsid() == -1){
return -1;
}
//将工作目录设置为根目录
if(chdir("/") == -1){
return -1;
}
//关闭打开的所有文件
for(i = 0; i <= 2; i++)
close(i);
//将fd的0, 1, 2重定向到/dev/null
open("/dev/null", O_RDWR);
dup(0);
dup(0);
printf("123123123123");
return 0;
}