实验十七Linux下进程线程的创建课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《实验十七Linux下进程线程的创建课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 十七 Linux 进程 线程 创建 课件
- 资源描述:
-
1、 LinuxLinux下进程和线程的创建下进程和线程的创建 吴国伟NoImage学习Linux中创建进程的方法学习系统调用Fork的使用方法学习系统调用Exec族的使用方法学习Linux中创建线程的方法学习pthread_create使用方法NoImageNoImage12/4/2022PIDPID:进程号。PPIDPPID:父进程号。UIDUID:其创建者的用户标识号,父子进程有相同的UID值。NoImageNoImageLinuxLinux进程创建进程创建Linux进程的族亲关系Linux进程之间不是孤立存在的,它们之间有一定的族亲关系。一个进程的子进程可以多于一个。一个进程只会有一个父进
2、程。进程1进程2父进程子进程产产 生生NoImageLinuxLinux进程创建进程创建系统加电启动后,系统中只有一个进程初始化进程,又称init进程,是所有进程的祖先进程,它的进程pid=1在linux中除了init进程是由系统启动时创建的外,其他所有进程都是由当前进程使用系统调用fork()创建的。进程创建后父子进程在系统中并发执行。NoImage进程结构进程结构同时运行grep程序,在不同文件中查找不同的字符串PID 101代码数据s=“one”函数库文件Trek.txtPID 102代码数据s=“two”函数库文件Next.txtgrep程序代码C语言函数库NoImageForkFor
3、k()()系统调用系统调用此时一个进程“分裂”成两个进程:父进程和子进程。区别:进程ID。利用getpid()来得到进程号。通过fork创建一个新进程,系统复制当前进程,在进程表中创建一个新的表项新进程几乎与原进程相同,执行代码也相同但有自己的数据空间,环境,文件描述符等#include pid_t fork();NoImageForkFork()()系统调用系统调用fork调用的一个奇妙之处就是它仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值:父进程:返回子进程的PID;子进程:返回0;出现错误:返回-1;最初的进程fork()原进程继续执行新进程返回一个新的pid返回0NoIma
4、ge12/4/2022#include#include#include int main()int pid=fork();if(pid=-1)printf(error!n);else if(pid=0)printf(This is the child process!nchild process id=%dn,getpid();else printf(This is the parent process!nparent process id=%dn,getpid();return 0;NoImageNoImage12/4/2022运行结果:This is the child process!c
5、hild process id=4800This is the parent process!parent process id=4799NoImageNoImageForkFork()()系统调用系统调用NoImageNoImage等待一个进程结束等待一个进程结束#include#includepid_t wait(int*stat_loc)父进程调用1.wait系统调用将暂停父进程直到它的子进程结束为止2.返回子进程的PID3.状态信息允许父进程了解子进程的退出状态,即子进程main函数返回值或子进程中exit函数的退出码4.若stat_loc不为空指针,状态信息被写入他指定的为止NoIm
6、age12/4/2022父进程创建子进程后,子进程一般要执行不同的程序.为了调用系统程序,我们可以使用系统调用exec 族调用。Exec函数可以把当前进程替换为一个新进程exec函数包含以下五个函数:NoImage#includeint execl(constchar*path,const char*arg,);int execlp(constchar*file,const char*arg,);int execle(constchar*path,const char*arg,char*const envp);int execv(constchar*path,char*const argv);
7、int execvp(constchar*file,char*const argv);NoImage12/4/2022其中只有execve是真正意义上的系统调用,其它都是在此基础上经过包装的库函数。#includeintexecve(constchar*path,char*const argv,char*const envp);path:可执行文件路径。argv:要执行的文件名或命令名。envp:环境变量,可省略NoImageNoImageLinux Linux 创建线程创建线程线程:一个进程内部的一个控制序列每个进程都至少有一个执行线程创建线程与创建线程与forkfork区别区别fork:f
展开阅读全文