第二個問題
首先,進程和線程是不同的。
在多進程的情況下,如果父進程先結束,那麽子進程會被init進程接收,成為init進程的子進程,然後子進程繼續運行,直到結束。init進程負責獲取這些子進程的結束狀態,並釋放進程資源。如果子進程先結束,那麽父進程就應該使用wait或waitpid來獲取子進程的結束狀態,釋放進程資源,否則子進程就會變成死進程,它所占用的進程資源也不會被釋放。
多線程的時候,如果妳說的父線程或者main在最後用了return或者exit,或者處理完了,那麽整個進程結束,其他子線程自然結束。如果main以pthread_exit結束,則只有父線程結束,子線程仍在運行。類似地,如果在子線程結束時調用exit,那麽整個進程包括父線程的結束。如果pthread_exit被調用或者正常結束,那麽只有子線程結束。
另外,如果子線程的末尾沒有separation屬性,其他線程應該使用pthread_join來獲取線程的結束狀態,釋放線程資源,就像進程中的wait和waitpid壹樣。