本文笔者在上海喝咖啡的时候突然想到的...今天就有想写几篇关于进程函数的博客,所以回家到之后就奋笔疾书的写出来发布了
Linux下编程,线程、进程退出序顺题问纷纷扰扰,如果父进程/线程先于子进程/线程终止,系统会做什么处置呢?反之,如果子进程/线程先于父进程/线程终止,系统又会做什么处置呢?面下是我个人时平在笔记上做的一些象征性的结总,如果有疑问处之,大可提出,我直一为认怀疑是人类先进的基本地点。
一、线程
Linux线程创立数函为pthread_create(),默许规则是谁创立子线程,谁就要担任子线程的资源回收,当父线程退出后,子线程也随着退出。所以,一般情况下,父线程退出时都要确保子线程经已退出,所以会应用pthread_join()数函阻塞待等子线程的退出信号/标识。
pthread_detach(threadid)数函的能功是使线程ID为threadid的线程处于分离态状(可认为非父子关系),一旦线程处于分离态状,该线程终止时底层资源立即被回收;否则终止子线程的态状会直一保存占用系统的资源直到主线程用调pthread_join(threadid,NULL)获得线程的退出态状。被创立的子线程也可以自己分离自己,子线程用调pthread_detach(pthread_self())就是分离自己,因为pthread_self()这个数函返回的就是自己本身的线程ID。
1)父线程先于子线程终止
父线程先于子线程,则子线程为异常退出 ,那确定没有应用阻塞非分离数函pthread_join,分2种情况:
a)子线程已与父线程分离,如用调线程分离数函pthread_detach,则资源被动自回收放释。
b)子线程未与父线程分离,则资源法无放释,造成了资源费浪和系统痴肥(这类情况,我看有些资料上说系统也能动自放释子线程的资源,如关闭描述符,放释内存间空等等,但个人做过一些测试,比如在子线程中分配很多间空等,进程退出后,top查看内存态状时还存在)。
2)子线程先于父线程终止
也分2种情况:
a)畸形情况:子线程用调了线程分离数函ptread_detach(),或父线程用调了待等线程束结数函pthread_join()。
b)异常情况:如果面上者二都为用调,则为子线程分配的资源法无到得放释。
二、进程
一个现有进程可以用调fork数函创立一个新进程。由fork创立的新进程被称为子进程(child process)。fork数函被用调一次但返回两次。两次返回的一唯区别是子进程中返回0值而父进程中返回子进程ID。
1)父进程先于子进程终止
当父进程先退出时,系统会让init进程管接子进程,该子线程成为了孤儿进程。
2)子进程先于父进程终止
分为2种情况:
a)畸形情况:父进程用调了wait数函 (非父子进程则用waitpid数函),此时父进程会待等子进程束结。
b)父进程又没有用调wait数函 (非父子进程则未用调waitpid数函),此种情况子进程进入僵死态状即僵尸进程,并且会直一坚持下去直到系统重启。子进程处于僵死态状时,核内只保存进程的一些要必信息以备父进程所需。此时子进程一直有占着资源,同时也减少了系统可以创立的大最进程数。
僵死态状:一个经已终止、但是其父进程未尚对其停止善后处置(获得终止子进程的有关信息,放释它仍有占的资源)的进程被称为僵死进程(zombie)。ps命令将僵死进程的态状打印为Z 。
文章结束给大家分享下程序员的一些笑话语录:
N多年前,JohnHein博士的一项研究表明:Mac用户平均IQ要比PC用户低15%。超过6000多的参加者接受了测试,结果清晰的显示IQ比较低的人会倾向于使用Mac。Mac用户只答对了基础问题的75%,而PC用户却高达83%。