电商专业学习嵌入式软件开发第四十七天

  • 系统编程第三天

前两天将描述符讲完了,但是还不会用,今天老师讲的是关于进程的内容,今天终于拿到老师敲的代码了,要不然没有参考代码真的很难写,按照现在的情况,真的很难做到现学现卖",经常对刚讲的内容没印象,突然让写代码都不知道如何下手,还好现在有参考的了。

一、执行流:按照顺序执行的一段代码被称为执行流,在多任务操作系统环境下,执行流被分为:

  1. 任务流:
    a. 进程(process)
    b. 线程(thread)
  2. 异常流:操作系统负责这些代码

二、进程(process):正在执行的应用程序

  1. 可执行文件被执行变成进程的过程(即程序启动过程):
    1). 二进制指令读到内存中去
    2). 系统自动执行全局变量和静态局部变量定义语句
    3). 调用本程序的main函数

  2. 进程退出方法:
    1). main函数返回
    2). exit:不建议使用
    atexit
    3). abort:不允许使用

  3. 多任务操作系统,需要管理很多个进程:
    1). 每个进程有个唯一身份标识:pid
    2). 进程之间存在着父子关系
    3). 操作系统启动后运行的第一个进程被称为祖先进程(init)
    4). ps -ef:查看所有已经运行的任务正在等待获得CPU时间片任务,可以查看ppid
    ps -aux: 查看所有已经运行的任务,可以查看任务状态
    ps -a:只能查看从当前控制台运行起来的任务
    5). OS定义了一个结构体来描述进程的各种属性,这样的一个结构体类型对象被称PCB(Process Control Block)
    6). 任务的五个状态:
    就绪态:任务正在等待获得CPU时间片
    运行态:任务代码正在被CPU执行
    睡眠态:任务处于等待资源就位或某个条件成立的状态
    僵死态:任务已经终止但是所占资源还未被回收的状态
    暂停态:任务处于暂时停止后续还可以继续执行的状态
    7). 僵尸进程:处于僵死状态的进程
    8). 孤儿进程:其父进程已经终止,但本身还没有被祖先进程init领养的进程,这样的进程不会一直是孤儿,它们很快会被祖先进程init领养

  4. fork函数

    1. 处理过程如下:
      a. 复制父进程PCB
      b. 分别处理三类属性:
      a). 必须修改的(pid ppid)
      b). 自己独有但是继承父进程的初始值(栈区、数据区、堆区、文件描述符)
      c). 与父进程共用(代码区)
    2. 调用模板:
     pid_t pid;
     pid = fork();
     if(pid < 0)
     {//出错
     }
     else if(0 == pid)
     {//子进程才执行代码
     //......
     }
     else
     {//父进程才执行代码 
      //.....      
     }
     //......后续代码
  1. exec函数:替换当前进程
     1).exec开头的函数将替换当前进程为指定新的程序,新的程序将从自己main开始运行,直到结束。当前进程自此将拥有独立的代码区
     2). int execl(const char *path, const char *arg0,…,(char*)0);
     path为带路径的可执行文件名
     arg0为给指定程序main函数的argv[0]参数
     arg1为给指定程序main函数的argv[1]参数
     ......
     最后一个参数必须写NULL 
     3).int execlp(const char *file, const char *arg0,…,(char*)0);
     file为不带路径的可执行文件名(用于可执行文件在PATH环境变量指定的目录中))
     arg0为给指定程序main函数的argv[0]参数
     arg1为给指定程序main函数的argv[1]参数
     ......
     最后一个参数必须写NULL
     ```
6. 等待进程终止     
     1) wait函数:等待任一子进程终止
         pid_t wait(int *status);
         waitpid函数:等待指定子进程终止
         pid_t waitpid(pid_t pid, int *status, int options);//options一般填0
     这两个函数将做如下3件事:
     a)等待某一个子进程终止
     b)获取子进程退出的一些信息到status指向的空间(如main函数返回值)
     c)为已终止的子进程做善后处理(即回收子进程所占用的内存资源)
     
     作业:
     1) 编写程序完成如下功能:
         子进程负责:向文件f.txt中写入内容"Hello Process"
         父进程负责:子进程退出后,从f.txt中读出内容,并显示出来
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,761评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,953评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,998评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,248评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,130评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,145评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,550评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,236评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,510评论 1 291
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,601评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,376评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,247评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,613评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,911评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,191评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,532评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,739评论 2 335

推荐阅读更多精彩内容