linux的進程和線程的試驗和觀察

我在使用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]");
}
相關文章
相關標籤/搜索