這幾天把自己負責的服務改成了多進程模型,然后使用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",直接引起歧義。