Когда я пытаюсь использовать 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
Может ли кто-нибудь сказать мне, почему он создает два процесса вместо одного?
Я голосую за то, чтобы оставить открытым, потому что этот вопрос мне кажется довольно ясным.





Нет, здесь есть только одна копия вашего процесса.
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
Вы ошибаетесь. Это то, что делает sudo x. Он вызывает x как root в новом процессе и ждет его, отсюда и два процесса.
Ваш код вызывает
seteuidвместоsetuid?