linux高级编程(五、进程)

(6页)

本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!

19.90 积分

/ 第五天 进程 // 三、进程 (一)进程的基本概念程序:代码,一个普通二制流的文件,里面都是指令。进程:是处于运行状态的程序,是程序执行过程,是运行的程序。一个源程序经过编译、链接后,成为一个可执行的程序,当可执行程序被系统加 载到内存空间运行时就称为进程。同一个程序可以有多个进程,每一个进程都有自已的 PID线程:是独立指令流,是运行的代码段。是进程的一部分,在一个进程中可以有多个线 程。进程组:linux 系统中,每个进程都唯一归属于某个进程组,在 shell 环境中,一条 linux 指令就形成一个进程组,一个进程组可以有多个进程。进程会话:用户登陆一个新的 shell 环境,一个新的会话就产生了,一个会话可以包括 若干个进程组。这些进程组只能有一个前台进程组,其它进程组为后台运行进程组 1.进程属性进程创建后,系统内核为其分配了一系列的数据结构。这些数据结构中保存了进程的相 关属性,如下内容:ps -Alef 查看所有进程ps -alef 查看当前终端进程F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD4 S 0 1 0 0 78 0 - 518 - ? 00:00:01 initUID 进程用户标识PID 进程的标识符,进程创建时,内核为进程分配的唯一标识 IDPPID 进程的父标识符,linux 下全部进程组成一棵进程树,树根进程是 0 号进程 swapper,除根进程外,每个进程都有其对应的父进程STIME 进程状态,wait 等待状态,-运行状态2.进程的内存映像地址由高到低命令行参数栈:栈存放珵序局部变量,函数参数、函数返回值堆:堆的大小不固定,可根据程序运行过程中的要求动态变化BBS 段:程序未初始化的全局变量数据段:数来存放程序已初始化的全局变量、静态变量等代码段:可执行程序在内存中的映像,代码段是只读的,存放可执行文件指令3.进程的启动手动启动(加载)前台:目录/程序名 程序运行于终端前台,终端不能做其它操作后台:目录/程序名 name 环境变量名返回值 成功 环境变量值 失败 NULL(未定义环境变量)2)设置环境变量int putenv(char *string);string 要设置的环境变量串,其格式为“环境变量名=值“返回值 成功 0 失败 -1例:#include #include int main(){char *buffer;buffer = getenv (“CONFIG_PATH“);if(buffer==NULL) {putenv(“CONFIG_PATH=/etc“);}printf(“CONFIG_PATH=%s\n“,getenv(“CONFIG_PATH“));return 0;}7.获取进程标识符函数同一个程序可以有多个进程,每一个进程都有自已的 PIDpid_t getpid() //获取进程 PIDpid_t getppid() //获取进程的父进程 IDpid_t getpgrp() //获取进程组 ID例://---------------下午-------------------------------- (二)进程的创建与终止 1.创建子进程#include #include pid_t fork();返回值:父进程和子进程 ID,失败 -1fork 调用一次将返回两次,分别在父进程和子进程返回。在父进程中,返回值为子进程的进程标识符。在子进程中,返回值为 0fork 调用成功后,将由一个进程产生两个进程,各占独自的内存空间。同时运行父进程 和子进程。创建子进程时,把原来所有的资源复制了一份,做为子进程的资源。子进程复制了父进 程的数据段包括全局变量,但父子进程各有一份全局变量的拷贝。 所有各占独自的内存,因此不能通过全局变量在父子进程间通信。子进程继承了父进程的所有资源,包括用户 ID、用户组 ID、有效用户 ID、有效用户组 ID、进程组 ID、文件创建掩码和环境变量等。2.退出进程void exit(int status); //先检查文件是否被打开,把文件缓冲区内的数据写入文件,然后终 止进程void _exit(int status);//是直接终止进程,把退出地进程内存释放status:是进程结束后的返回值3. 等待进程结束#include pid_t wait(int *status); //是阻塞方式pid_t wait(pid_t pid,int *status,int options); //根据 options 确定是否阻塞status:在此处获取的进程结束时的返回值,进程返回值的指针,前 8 位是子进程的返回 值,后 8 位是操作系占用的位pid :指定等待哪一个进程返回的值options:等待返回信息的方式WNOHANG 不阻塞模式WUNTRACED 阻塞,只要进程暂停就返回状态0 阻塞方式等待例:pid_t pid=fork();int value;if (pid==-1){printf(“fork err\n“);exit(0);}if (pid==0){//子进程printf(“son------- pid =%d\n“,getpid());sleep(3);exit(65);}else {wait(printf(“father ---- %d\n“,value >> 8);printf(“father ---- %d\n“,value }return 0;例:pid_t pid=fork();int value;if (pid==-1){printf(“fork err\n“);exit(0);}if (pid==0){//子进程printf(“son------- pid =%d\n“,getpid());sleep(3);exit(65);}else {//wait(do{pid=waitpid(pid,printf(“father ---- %d\n“,value >> 8);printf(“father ---- %d\n“,value sleep(1);}while(pid==0);}(三)其它创建进程的方式创建子进程有三种方式:fork、exec、system 1.调用外部程序int system(char *command);command:要加载的外部程序调用返回值:-1 或 127 执行失败,其它 成功例:调用其它程序system(“./play -f ./aaa.wav“);被调用者成为当前进程的子进程通过 system 可以调用任何程序和指令,system 首先 fork 子进程,然后调用 exec 执行 新的 shell,在 shell 中执行要执行的程序 2.exec 系列函数int execv(const char * path,char *const argv[]);int execve(const char * path,char *const argv[],char *const envp[]);int execvp(const char *file,char *const argv[]);int execl(const char *path,const char *arg,...);int execle(const char *path,const char *arg,...);int execlp(const char *file,const char *arg,...);path:要执行的程序路径,这里是路径名,可以是绝对路径或相对路径file:要执行的程序名,可以带路径argv:命令行参数数组envp:环境变量组。arg: 程序第 0 个参数即程序名本身,相当于 argv[0]exec 系统函数并不创建新进程,exec 系列函数是清除父进程的可执行代码映像,用新 程序的代码复盖调用 exec 的进程代码。 如果 exec 执行成功,进程将从新程序的 main 函数入口开始执行。 例:execl(“bin/ls“,“ls“,“-l“,NULL);char *para[]={“ls“,“-a“,NULL};execv(“/bin/ls“,para); 关 键 词: linux 高级 编程 进程

 天天文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。

linux高级编程进程,linux高级编程(五、进程)相关推荐

  1. potplayer 多个进程_Linux系统编程1.2:进程概念简介

    进程是操作系统中最重要的概念之一. 一.进程的概念 在UNIX/Linux中, 进程是正在执行的程序, 它相当于Windows环境内的任务.每个进程包括程序代码和数据.其中数据包含程序变量数据.外部数 ...

  2. linux运维脚本编写,最强Linux自动化运维 Shell高级脚本编程实战 带习题+项目实战案例+全套配置脚本...

    最强Linux自动化运维 Shell高级脚本编程实战 带习题+项目实战案例+全套配置脚本 大家可以通过参考下面的课程学习目录,就会发现单单只从目录上来分析就知道这是一部非常系统的Shell自动化脚本运 ...

  3. Linux高级专题详解--shell编程大全(shell变量,if语句,case语句,for循环,while循环,函数调用,数组,正则表达式,shell脚本三剑客--grep,sed,awk家族)

    shell编程 初始shell 程序 语言 编程 ---------------------------------- 语言 自然语言:汉语.英语 计算机语言:c语言.c++.(java php py ...

  4. 《Linux命令行与shell脚本编程大全 第3版》高级Shell脚本编程---32

    以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下: 转载于:https://www.cnbl ...

  5. 《Linux命令行与shell脚本编程大全 第3版》高级Shell脚本编程---24

    以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下: 转载于:https://www.cnbl ...

  6. 《Linux命令行与shell脚本编程大全 第3版》高级Shell脚本编程---35

    以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下: 转载于:https://www.cnbl ...

  7. Linux多线程编程之pthread (多线程编程) --- (高级)---原作优秀

    https://blog.csdn.net/skyroben/article/details/72793409 (博客优秀) 1.背景知识 Linux没有真正意义上的线程,它的实现是由进程来模拟,所以 ...

  8. linux终端和执行进程的关系,Linux系统编程第04期:打通进程与终端的任督二脉

    本课程是<嵌入式工程师自我修养>自学教程六步走中的第3步:Linux系统编程第04期. 进程,是Linux系统中任务调度运行的基本单元:一个程序的运行,都要被操作系统包装成"进程 ...

  9. 【Linux命令行与Shell脚本编程】第五章 理解 Shell 父子关系 后台进程 协程

    Linux命令行与Shell脚本编程 第五章 理解 Shell 文章目录 Linux命令行与Shell脚本编程 五,理解 Shell 5.1,shell的类型 5.2,shell的父子关系 5.2.1 ...

  10. python队列线程池_实例详解:python高级编程之消息队列(Queue)与进程池(Pool)

    今天为大家带来的内容是:python高级编程之消息队列(Queue)与进程池(Pool),结合了实例的形式详细分析了Python消息队列与进程池的相关原理.使用技巧与操作注意事项!!! Queue消息 ...

最新文章

  1. Pytorch归一化方法讲解与实战:BatchNormalization、LayerNormalization、nn.BatchNorm1d和LayerNorm()和F.normalize()
  2. python泰勒展开_如何利用sympy对未知函数$f(x)$进行符号泰勒展开
  3. 模型学习 - CNN及一系列发展
  4. hadoop(3)——yarn查看方式
  5. oracle gather trace,Oracle 11g新SQL Trace 10046方法
  6. 6张信用卡欠款10000到47000不等,会被起诉坐牢吗?
  7. MySQL对于表中数据的增删改查
  8. The use specified as definer('root'@'%') does not exist的解决办法
  9. GitHub Universe 2020 强势登陆,GitCode直播已上线
  10. 【POJ 3281】Dining【最大匹配、拆点】
  11. MacBook远程控制工具VNC Viewer_亲测使用
  12. java 中奖_java的if判断是否中奖了(21)
  13. 基于HTML5移动app开发教程一
  14. listview距离顶端白边
  15. 【Windows】解决家庭版系统无法开启远程桌面连接的问题
  16. 新风口 | 电商直播,跨境商家最该抓住的时代机遇!(附卖家成长教程及解决方案)
  17. 菜鸟的三遍读书法进阶
  18. 机器学习(三)防止语句歧义、平凡解、支持向量机
  19. 修改rcS启动定制功能,后台运行脚本,新建子SHELL进程。
  20. Delegate委托的使用

热门文章

  1. 富文本编辑器使用案例
  2. [leetcode]72. Edit Distance 最少编辑步数
  3. Asp.net WebApi版本控制
  4. HihoCoder - Floyd算法
  5. ORB_SLAM2之Pangolin的安装与问题处理
  6. 第10章 评价分类结果 学习笔记中
  7. 面向对象设计 腾讯代码案例 学习人家的模式和格式
  8. 返回固定页面的http服务器
  9. 进程以及状态 进程的创建
  10. Python迭代器(Iterator)