当我尝试在程序中setuid
时,它将创建2个进程。一个是父进程,另一个是子进程。
int isRoot()
{
if (getuid() != 0)
{
return 0;
}
else
{
return 1;
}
}
int main()
{
printf("%s \n \n",getUserName());
printf("%d\n",getuid());
if(!isRoot())
{
printf("This program must be run as root/sudo user!!");
exit(0);
}
seteuid(1000);
while (1) {}
printf("%s \n \n",getUserName());
}
当我使用ps
命令检查时,它显示了两个不同的过程:
sagar@sagar-desktop:~$ ps -aef | grep a.out
root 20293 18135 0 15:36 pts/7 00:00:00 sudo ./a.out
sagar 20294 20293 99 15:36 pts/7 00:00:17 ./a.out
谁能告诉我为什么它创建两个进程而不是一个?
答案 0 :(得分:3)
您误会了。 sudo x
就是这样做的。它在新进程中以根的身份调用x
,并等待它,因此出现了两个进程。
答案 1 :(得分:2)
不,您的过程只有一个副本。
root 20293 18135 0 15:36 pts/7 00:00:00 sudo ./a.out
这是sudo,而不是您的进程:./ a.out是其命令行参数。然后,您将流程作为子流程生成:
sagar 20294 20293 99 15:36 pts/7 00:00:17 ./a.out