这几天把自己负责的服务改成了多进程模型,然后使用sudo来启动进程,示例程序如下:
int main(void)
{
fork();
while(1);
}
编译:
`gcc test.c
`
使用sudo执行a.out sudo ./a.out
接下来用ps -aux | grep a.out 查找进程得出如下结果:
root 18001 0.3 0.1 179860 3356 pts/23 S+ 15:33 0:00 sudo ./a.out
root 18003 93.0 0.0 3920 368 pts/23 R+ 15:34 0:11 ./a.out
root 18004 93.0 0.0 3920 92 pts/23 R+ 15:34 0:11 ./a.out
很明显,我们的程序应该只fork了一个进程,加上自己本身,共两个进程,本来一直以为是自己那个小伙伴的代码中fork了一个进程。直到今天总觉得不对劲,平白无故多了一个进程,这是哪里来的,当我写了上面这个简单模型后,再使劲想了想,用sudo cat再试验了一下,终于回过味来了。原来上面的sudo ./a.out只是一个shell,这和sudo程序的实现有关。
当使用sudo ./a.out 执行代码时,会首先启动一个root用户的shell,但是这个shell的名字就叫做"sudo ./a.out",直接引起歧义。