fork函数的总结:
总结对进程学习之中的回收函数wait
wait函数:
1.获取子进程的退出状态
2.回收资源------会让僵尸态的子进程销毁
注:1.wait函数本身是一个阻塞操作,会使调用者阻塞
2.父进程要获得子进程的退出状态
子进程:
exit函数(退出状态值)
退出状态值,只有最低8位有效(16进制的255)
父进程:
函数wait()
获取得到退出状态值
if(WIFEXITED())为真
WEXITSTATUS()再获得exit的退出状态值
waitpid函数:
功能:等待子进程状态发生变化
参数1:pid > 0
表示等待指定的子进程状态改变
pid = -1
表示等待所有子进程状态改变
参数2:wstatus:表示获取到子进程状态信息
参数3:options:可以不阻塞------不阻塞传宏WNOHANG,不传是默认为阻塞
wait(&wstatus) = waitpid(-1,&wstatus,0)
非阻塞调用:
waitpid(-1,&wstatus,WNOHANG)
非阻塞和阻塞:
1.阻塞:会影响父进程处理逻辑
2.非阻塞:父进程会去查看子进程状态发生改变,但是如果没有发生改变,父进程不阻塞,继续往下执行
非阻塞必须套在循环中处理 ==== 轮询
小总结:
--------------------------------------------------------------------------------------------------------------------------------
多任务技术:线程
概述:
什么是线程:
线程------轻量级的进程
进程------重量级的进程
线程需要的资源少,创建的速度和效率比进程高
线程成为cpu执行的最小单元
进程成为资源分配的基本单位
线程的组成:
线程tid,程序计数器,寄存器集合,栈
线程与进程的关系:
a.线程是存在于进程之中的
b.线程共享了进程的资源
c.线程结束,不一定导致进程结束,反之,线程一定结束
线程的编程(类似于进程的编程):
1.线程的创建:
函数pthread_create
参数1:thread:线程tid
参数2:attr:线程属性,一般是NULL,表示默认属性(可结合性+分离属性)
可结合属性:手动回收
分离属性:系统自动回收
参数3:start_routine-------线程执行函数(线程回调函数)
(指向指针函数的函数指针)
是线程的回调函数,是线程的执行空间
参数4:arg,回调函数的参数
函数pthread_create 返回值:成功为0,失败为错误码
gcc时后必须加-lpthread
线程的退出:
函数pthread_exit()
功能:结束调用的线程
资源回收:
pthread_join()
功能:等待线程结束
参数1:thread------线程tid
参数2:retval------用来保存退出状态值所在空间的地址
函数