实验十七 Linux下进程线程地创建.pptVIP

  1. 1、本文档共25页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验十七 Linux下进程线程地创建

当用fork启动一个子进程时,子进程就有了它自己的生命周期并将独立运行。有时候我们希望知道一个进程何时结束。可以通过在父进程中调用wait函数控制 Linux下进程和线程的创建 吴国伟 学习Linux中创建进程的方法 学习系统调用Fork的使用方法 学习系统调用Exec族的使用方法 学习Linux中创建线程的方法 学习pthread_create使用方法 * PID:进程号。 PPID:父进程号。 UID:其创建者的用户标识号,父子进程有相同的UID值。 Linux进程创建 Linux进程的族亲关系 Linux进程之间不是孤立存在的,它们之间有一定的族亲关系。 一个进程的子进程可以多于一个。 一个进程只会有一个父进程。 进程1 进程2 父进程 子进程 产 生 Linux进程创建 系统加电启动后,系统中只有一个进程——初始化进程,又称init进程,是所有进程的祖先进程,它的进程pid=1 在linux中除了init进程是由系统启动时创建的外,其他所有进程都是由当前进程使用系统调用fork()创建的。 进程创建后父子进程在系统中并发执行。 进程结构 同时运行grep程序,在不同文件中查找不同的字符串 PID 101 代码 数据 s=“one” 函数库 文件 Trek.txt PID 102 代码 数据 s=“two” 函数库 文件 Next.txt grep程序代码 C语言函数库 Fork()系统调用 此时一个进程“分裂”成两个进程:父进程和子进程。 区别:进程ID。利用getpid()来得到进程号。 通过fork创建一个新进程,系统复制当前进程,在进程表中创建一个新的表项 新进程几乎与原进程相同,执行代码也相同 但有自己的数据空间,环境,文件描述符等 #include unistd.h pid_t fork( ); Fork()系统调用 fork调用的一个奇妙之处就是它仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值: 父进程:返回子进程的PID; 子进程:返回0; 出现错误:返回-1; 最初的进程 fork() 原进程继续 执行 新进程 返回一个新的pid 返回0 * #include unistd.h #include sys/types.h #include stdio.h int main() { int pid = fork(); if (pid == -1 ){ printf(error!\n); } else if( pid == 0 ) { printf(This is the child process!\nchild process id = %d\n,getpid()); } else { printf(This is the parent process!\nparent process id = %d\n,getpid()); } return 0;} * 运行结果: This is the child process! child process id = 4800 This is the parent process! parent process id = 4799 Fork()系统调用 等待一个进程结束 #includesys/types.h #includesys/wait.h pid_t wait(int *stat_loc) 父进程调用 1. wait系统调用将暂停父进程直到它的子进程结束为止 2. 返回子进程的PID 3. 状态信息允许父进程了解子进程的退出状态,即子进程main函数返回值或子进程中exit函数的退出码 4. 若stat_loc不为空指针,状态信息被写入他指定的为止 * 父进程创建子进程后,子进程一般要执行不同的程序.为了调用系统程序,我们可以使用系统调用exec 族调用。 Exec函数可以把当前进程替换为一个新进程 exec函数包含以下五个函数: #includeunistd.h int 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[]); int execvp(constchar* file, char* const

文档评论(0)

155****8706 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档