這幾天把自己負(fù)責(zé)的服務(wù)改成了多進(jìn)程模型,然后使用sudo來啟動進(jìn)程,示例程序如下:
int main(void)
{
fork();
while(1);
}
編譯:
`gcc test.c
`
使用sudo執(zhí)行a.out sudo ./a.out
接下來用ps -aux | grep a.out
查找進(jìn)程得出如下結(jié)果:
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
很明顯,我們的程序應(yīng)該只fork了一個(gè)進(jìn)程,加上自己本身,共兩個(gè)進(jìn)程,本來一直以為是自己那個(gè)小伙伴的代碼中fork了一個(gè)進(jìn)程。直到今天總覺得不對勁,平白無故多了一個(gè)進(jìn)程,這是哪里來的,當(dāng)我寫了上面這個(gè)簡單模型后,再使勁想了想,用sudo cat
再試驗(yàn)了一下,終于回過味來了。原來上面的sudo ./a.out只是一個(gè)shell,這和sudo程序的實(shí)現(xiàn)有關(guān)。
當(dāng)使用sudo ./a.out 執(zhí)行代碼時(shí),會首先啟動一個(gè)root用戶的shell,但是這個(gè)shell的名字就叫做"sudo ./a.out",直接引起歧義。