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

Linux下进程和线程的创建 吴国伟 学习Linux中创建进程的方法学习系统调用Fork的使用方法学习系统调用c族的使用方法学习Linux中创建线程的方法学习pthread create使用方法 1 31 2020 PID 进程号 PPID 父进程号 UID 其创建者的用户标识号 父子进程有相同的UID值 Linux进程创建 Linux进程的族亲关系Linux进程之间不是孤立存在的 它们之间有一定的族亲关系 一个进程的子进程可以多于一个 一个进程只会有一个父进程 进程1 进程2 父进程 子进程 产生 Linux进程创建 系统加电启动后 系统中只有一个进程 初始化进程 又称init进程 是所有进程的祖先进程 它的进程pid 1在linux中除了init进程是由系统启动时创建的外 其他所有进程都是由当前进程使用系统调用fork 创建的 进程创建后父子进程在系统中并发执行 进程结构 同时运行grep程序 在不同文件中查找不同的字符串 PID101 代码 数据s one 函数库 文件 Trek txt PID102 代码 数据s two 函数库 文件 Next txt grep程序代码 C语言函数库 Fork 系统调用 此时一个进程 分裂 成两个进程 父进程和子进程 区别 进程ID 利用getpid 来得到进程号 通过fork创建一个新进程 系统复制当前进程 在进程表中创建一个新的表项新进程几乎与原进程相同 执行代码也相同但有自己的数据空间 环境 文件描述符等 includepid tfork Fork 系统调用 fork调用的一个奇妙之处就是它仅仅被调用一次 却能够返回两次 它可能有三种不同的返回值 父进程 返回子进程的PID 子进程 返回0 出现错误 返回 1 最初的进程 fork 原进程继续执行 新进程 返回一个新的pid 返回0 1 31 2020 include include includeintmain intpid fork if pid 1 printf error n elseif pid 0 printf Thisisthechildprocess nchildprocessid d n getpid else printf Thisistheparentprocess nparentprocessid d n getpid return0 1 31 2020 运行结果 Thisisthechildprocess childprocessid 4800Thisistheparentprocess parentprocessid 4799 Fork 系统调用 等待一个进程结束 include includepid twait int stat loc 父进程调用1 wait系统调用将暂停父进程直到它的子进程结束为止2 返回子进程的PID3 状态信息允许父进程了解子进程的退出状态 即子进程main函数返回值或子进程中exit函数的退出码4 若stat loc不为空指针 状态信息被写入他指定的为止 1 31 2020 父进程创建子进程后 子进程一般要执行不同的程序 为了调用系统程序 我们可以使用系统调用c族调用 c函数可以把当前进程替换为一个新进程c函数包含以下五个函数 includeintcl constchar path constchar arg intclp constchar file constchar arg intcle constchar path constchar arg char constenvp intcv constchar path char constargv intcvp constchar file char constargv 1 31 2020 其中只有cve是真正意义上的系统调用 其它都是在此基础上经过包装的库函数 includeintcve constchar path char constargv char constenvp path 可执行文件路径 argv 要执行的文件名或命令名 envp 环境变量 可省略 Linux创建线程 线程 一个进程内部的一个控制序列每个进程都至少有一个执行线程创建线程与fork区别fork 当前进程的拷贝 有自己的变量和PID 时间调度独立 执行几乎完全独立于父进程新线程 有自己独立栈 有局部变量 但与创建者共享全局变量 文件描述 信号句柄和当前状态等 线程优缺点 优点 一般而言 线程创建以及线程之间的切换需要操作系统做的工作比进程少得多 例子 编辑文档过程的多线程 一个线程负责用户输入和编辑 一个线程负责字数统计缺点 多线程程序因变量共享可能引发潜在错误 调试困难 pthread creat intpthread create pthread t thread pthread attr t attr void start routine void void arg 参数1 该指针指向的变量中将被写入一个标识符 用该标识符来引用新线程2 设置线程属性 一般不用设为null3 表示线程将要启动执行的函数4 该函数需要的参数调用成功返回值为0 否则返回错误代码 voidpthread exit void retval 调用上面函数终止线程返回一个指向某个对象的指针注意 不能用它来返回一个指向局部变量的指针 因为线程调用该函数后 这个局部变量就不存在了 pthread join intpthread join pthread tth void thread return 等待线程结束 收集线程信息参数1 指定了将要等待结束的线程参数2 是一个指针 指向了一个指针 后者指向线程的返回值 例子 include include include includevoid thread function void arg charmessage Helloworld intmain intres pthread ta thread void thread result res pthread create res pthread join a thread 运行结果 Waitingforthreadtofinish thread functionisrunning ArgumentwasHelloworldThreadjoined itreturnedThankyoufortheCPUtimeMessageisnowBye 编译须知 gcc lpthread ofilefile c 随堂作业 3 43 64 74 11 3 6Fibonacci序列是一组 0 1 1 2 3 5 8 fib0 0 fib1 1 fibn fibn 1 fibn 2 使用系统调用fork 编写一个C程序 它在其子程序中生成Fibonacci序列 序列号码将会在命令行中提供 例如 如果提供的是5 Fibonacci序列中的前5个数将由子进程输出 由于父进程和子进程都有他们自己的数据副本 对子进程而言 输出序列式必要的 退出程序前 父进程调用wait 调用来等待子进程结束 执行必要的错误检查以保证不会接受命令行传递来的负数号码 4 11Fibonacci序列是一组 0 1 1 2 3 5 8 fib0 0 fib1 1 fibn fibn 1 fibn 2 使用phtread多线程编程程序来生成Fibonacci序列 程序应该这样工作 用户运行程序时 在命令行输入要产生Fibonaci序列数 然后程序创建一个新的线程来产生Fibonacci数 把这个序列放到线程共享的数据中 数组可能是一种最方便的数据结构 当线程执行完成后 父线程将输出子线程产生的序列 由于在子线程结束前 父线程不能开始输出Fibonacci序列 因此 父线程需要等子线程结束

linux线程 ppt,实验十七Linux下进程线程的创建.ppt相关推荐

  1. linux系统进程控制实验报告,Linux进程控制实验报告.doc

    里奴性进程控制实验报告 实验名称: Linux进程控制 实验要求:一.编写一个Linux系统C程序,由父亲创建2个子进程,再由子进程各自从控制台接收一串字符串,保存在各自的全局字符串变量中,然后正常结 ...

  2. linux 查看java进城_linux查看java进程|线程池信息

    1.根据端口号57638查看对应进程pid/name=1463/java netstat -apn | grep  57638 tcp        0      0 ::ffff:172.20.5. ...

  3. linux使用环境实验报告,Linux 及其使用环境实验报告.doc

    计算机语言与程序设计上机实验报告 学号: 姓名: 所在系: 班级: 实验名称: 实验1 Linux 及其使用环境 实验日期 实验指导教师 实验机房及机号 ----------------------- ...

  4. 图解linux32位平台下进程线程长什么样子

    目录 0.linux的进程线程 1.单线程的进程 2.多线程的进程 3 总结 3.1 公共之处 3.2 差异之处 4.好的图解文章推荐 4.1 深入理解linux内核中的栈 4.2 进程虚拟内存管理 ...

  5. linux内核漫游实验目的,Linux内核源代码漫游——

    Linux内核源代码漫游 Alessandro Rubini著, rubini@pop.systemy.it 赵炯 译,gohigh@shtdu.edu.cn 本章试图以顺序的方式来解释Linux源代 ...

  6. Linux复习3 实验 教材 Linux 教程 第5版 燕山大学

    实验一 Linux系统安装与简单配置 一.实验目的 1.掌握Linux系统安装的分区准备. 2.掌握Linux系统的安装步骤. 3.掌握Linux系统分区的挂载和卸载. 4.掌握Linux系统的启动和 ...

  7. linux内存管理实验malloc,linux内存管理实验报告.doc

    linux内存管理实验报告 操作系统实验报告 院别:XXXXXX 班级:XXXXXX 学号:XXXXXX 姓名:稻草人 实验题目:内存管理实验 实验目的 通过本次试验体会操作系统中内存的分配模式: 掌 ...

  8. 熟悉linux操作系统的使用实验报告,Linux系统的熟悉与使用操作系统实验报告

    Linux系统的熟悉与使用操作系统实验报告 实验一 Linux系统熟悉与使用 Linux有两种不同的含义.从严格的技术定义讲,Linux指的是开放源代码的Unix类操作系统的内核.然而,目前大多数人用 ...

  9. linux多线程编程实验报告,Linux多线程编程

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 使用pthread_create函数创建线程.1 2 3 4 5 6 7 8int (pthread_t *__rest ...

  10. java基础巩固-宇宙第一AiYWM:为了维持生计,四大基础之OS_Part_1整起(进程线程协程并发并行、进程线程切换进程间通信、死锁\进程调度策略、分段分页、交换空间、OS三大调度机制)

    PART0:OS,这货到底是个啥? OS,是个啥? OS的结构们: 存储器: 存储器的层次结构: 内存:我们的程序和数据都是存储在内存,我们的程序和数据都是存储在内存,每一个字节都对应一个内存地址.内 ...

最新文章

  1. 感量越大抑制频率约低_东芝推出高纹波抑制比、低噪声LDO稳压器
  2. java λ表达式_Java λ表达式
  3. 在做mvc时遇到的一些问题
  4. 轨迹系列8——记某真实项目中轨迹展示查询效率优化方案一(初步设计)
  5. 关于xmpp协议发送消息,登录认证SSL报错的问题
  6. Lind.DDD.Manager里的3,7,15,31,63,127,255,511,1023,2047
  7. webpack-dev-server 本地文件 发布 网站 域名 根目录
  8. BP神经网络算法学习
  9. matlab norm函数_Matlab测夹角
  10. 怎样的销售能快速成交别人?
  11. 大学二年级各科的学习成绩
  12. python利器-Python 数据可视化利器
  13. CentOS7与CentOS6区别及特点
  14. Python(二):基本数据类型、序列的基本操作
  15. 如何搭建tftp服务器
  16. 【考研计算机网络】 冲刺笔记
  17. 科技爱好者周刊(第 167 期):广告拦截器太过分了
  18. 机器学习基础(林軒田)笔记之七
  19. QQ消息群发助手(超级简单)
  20. linux用c语言模拟抢票系统,C语言可以编写抢票软件吗

热门文章

  1. 时域,空域,频域的基本概念
  2. 正好股票开户有色金属应声大涨
  3. wifi信号增强android,WiFi信号增强大师
  4. 易接SDK流程记录以及AndroidManifest解析(无干货)
  5. 2021年西安交通大学软件学院考研信息
  6. python概述ppt_江红-第1章-Python概述ppt
  7. PLSQL下载及安装参照
  8. python操作word实现小学拼音本功能
  9. [初识python]使用python给单词表加音标
  10. http-server介绍及使用