我在使用ubuntu系統,而後寫了一段代碼,fork一個子進程。而後我用ps -el命令查看主進程和子進程的pid號。驚奇的發現主進程已經不存在,子進程的ppid是一個init進程的pid,而這個init的pid並非1。ubuntu
查找緣由後,我知道了在主進程的main函數中fork執行後,我寫的main函數已經執行完畢了,因此主進程就結束了。若是防止主進程結束,能夠在main函數的末尾加上getchar()。另外,在ubuntu系統,會有兩個init進程,一個init進程的pid是1,還有一個init進程的pid不是1。具體緣由就不知道了。函數
抱着好奇心,我又寫了一個c文件,觀察主線程和子線程的關係。得出結論是,主線程main運行結束後,子線程會被結束掉。從而進程也會結束掉。這個c文件是:測試
/* 測試:若是main線程結束運行,子線程是否馬上結束,進程是否還在 */ #include <stdio.h> #include <pthread.h> void *child_thread(void*arg); int main(){ pthread_t tid; pthread_create(&tid, NULL, &child_thread, NULL ); usleep(9000000); return 1; } void *child_thread(void*arg){ while (1) { usleep(1000000); //休眠1s printf("%s", "[child_thread][usleep]\r\n\r\n"); } printf("%s", "[child_thread][dead]"); }