实验十七Linux下进程线程的创建

实验十七Linux下进程线程的创建

ID:46329401

大小:1.05 MB

页数:25页

时间:2019-11-22

实验十七Linux下进程线程的创建_第1页
实验十七Linux下进程线程的创建_第2页
实验十七Linux下进程线程的创建_第3页
实验十七Linux下进程线程的创建_第4页
实验十七Linux下进程线程的创建_第5页
资源描述:

《实验十七Linux下进程线程的创建》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Linux下进程和线程的创建吴国伟学习Linux中创建进程的方法学习系统调用Fork的使用方法学习系统调用Exec族的使用方法学习Linux中创建线程的方法学习pthread_create使用方法10/4/2021PID:进程号。PPID:父进程号。UID:其创建者的用户标识号,父子进程有相同的UID值。Linux进程创建Linux进程的族亲关系Linux进程之间不是孤立存在的,它们之间有一定的族亲关系。一个进程的子进程可以多于一个。一个进程只会有一个父进程。进程1进程2父进程子进程产生Linux进程创建系统加电启动后,系统中只有一个进程——初始化进程,又称init进程,是所有进

2、程的祖先进程,它的进程pid=1在linux中除了init进程是由系统启动时创建的外,其他所有进程都是由当前进程使用系统调用fork()创建的。进程创建后父子进程在系统中并发执行。进程结构同时运行grep程序,在不同文件中查找不同的字符串PID101代码数据s=“one”函数库文件Trek.txtPID102代码数据s=“two”函数库文件Next.txtgrep程序代码C语言函数库Fork()系统调用此时一个进程“分裂”成两个进程:父进程和子进程。区别:进程ID。利用getpid()来得到进程号。通过fork创建一个新进程,系统复制当前进程,在进程表中创建一个新的表项新进程几乎

3、与原进程相同,执行代码也相同但有自己的数据空间,环境,文件描述符等#includepid_tfork();Fork()系统调用fork调用的一个奇妙之处就是它仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值:父进程:返回子进程的PID;子进程:返回0;出现错误:返回-1;最初的进程fork()原进程继续执行新进程返回一个新的pid返回010/4/2021#include#include#includeintmain(){intpid=fork();if(pid==-1){printf("e

4、rror!");}elseif(pid==0){printf("Thisisthechildprocess!childprocessid=%d",getpid());}else{printf("Thisistheparentprocess!parentprocessid=%d",getpid());}return0;}10/4/2021运行结果:Thisisthechildprocess!childprocessid=4800Thisistheparentprocess!parentprocessid=4799Fork()系统调用等待一个进程结束#includ

5、e#includepid_twait(int*stat_loc)父进程调用1.wait系统调用将暂停父进程直到它的子进程结束为止2.返回子进程的PID3.状态信息允许父进程了解子进程的退出状态,即子进程main函数返回值或子进程中exit函数的退出码4.若stat_loc不为空指针,状态信息被写入他指定的为止10/4/2021父进程创建子进程后,子进程一般要执行不同的程序.为了调用系统程序,我们可以使用系统调用exec族调用。Exec函数可以把当前进程替换为一个新进程exec函数包含以下五个函数:#include

6、>intexecl(constchar*path,constchar*arg,…);intexeclp(constchar*file,constchar*arg,…);intexecle(constchar*path,constchar*arg,char*constenvp[]);intexecv(constchar*path,char*constargv[]);intexecvp(constchar*file,char*constargv[]);10/4/2021其中只有execve是真正意义上的系统调用,其它都是在此基础上经过包装的库函数。#include

7、intexecve(constchar*path,char*constargv[],char*constenvp[]);path:可执行文件路径。argv[]:要执行的文件名或命令名。envp[]:环境变量,可省略Linux创建线程线程:一个进程内部的一个控制序列每个进程都至少有一个执行线程创建线程与fork区别fork:当前进程的拷贝,有自己的变量和PID,时间调度独立,执行几乎完全独立于父进程新线程:有自己独立栈(有局部变量)但与创建者共享全局变量,文件描述,信号句柄和当前状

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。