码迷,mamicode.com
首页 > 系统相关 > 详细

论‘进程’相关操作

时间:2016-07-25 16:38:47      阅读:258      评论:0      收藏:0      [点我收藏+]

标签:进程、exit、atexit、栈帧、fork、execve

★进程相关概念

        (1)进程:是一个能够分配处理器并由处理器执行的,能够携带资源的活动实体。

        (2)进程控制块(PCB):每一个进程中都有唯一的一个进程控制块来保存进程的相关信息,实际PCB就是一个task_struct的结构体。具体的见http://10740590.blog.51cto.com/10730590/1785457

        (3)进程状态:进程是一个活动实体,并不代表进程是一直处于运行状态,一个进程可以有很多种状态。

            △R(running)表示运行状态

             △S(sleeping)表示可唤醒睡眠状态

             △D(disk sleep)表示不可唤醒的睡眠状态

             △T(stopped)表示暂停状态

             △t(tracing stop)表示终止状态

             △X(dead)表示死亡状态

             △Z(zombie)表示僵尸状态


★进程创建执行

        进程的创建有两种方法:fork()和execve()。两者都是创建的进程都是运行进程的子进程,创建后的子进程会得到父进程中的数据段、栈段、堆区域的一份拷贝,这些子进程都是可以对其进行更改的,但是文本段是两者共享的,不能被子进程进行修改。


      下面是fork的使用方法:

技术分享


        运行结果:

技术分享


★进程终止

      进程终止有以下几种方式:

             (1)从main函数返回

              (2)调用exit函数

              (3)调用_exit或_Exit;

              (4)最后一个线程从启动例程返回

              (5)最后一个线程调用pthread_exit;

              (6)调用abort函数

              (7)接到一个信号并终止

              (8)最后一个线程对取消请求做出相应


      前5种为正常终止,后三种为异常终止。从main函数中return退出为进程退出,因为没有在继续执行的代码,但是在程序中间的任何位置return,不算是进程退出,只能算是程序调用结束。

      exit返回:

                 exit()还让return系统会强制刷新缓冲区,文件描述符

                _exit()强制直接结束,不需要管其余的东西

                _Exit()和_exit是相同的 


★exit函数与atexit函数

(1)exit、atexit函数定义

       头文件:#include <stdlib.h>                  头文件:#include <stdlib.h>

                     void exit(int status);                                int atexit(void (*fun)(void));


     一个进程可以登记若干个函数,这些函数由exit自动调用,这些函数被称为终止处理函数,atexit函数就可以登记这些函数。exit调用终止处理函数的顺序和atexit登记的顺序是相反的,如果一个函数可以被多次的登记,也可以被多次的调用。

    

技术分享

     运行结果:

技术分享


★栈帧

1.堆栈

      堆栈是C语言以及其他语言运行时必须使用的一块空间,它的主要作用是函数调用、传递参数、保存返回地址、提供局部变量空间的。

      ①堆需要程序员自己申请,并且需要显示的进行释放,申请和释放必须是成对出现的,要不然就会出现内存泄漏,因为堆上的空间生命周期都是一直存在,直到手动进行释放。而栈是系统自动进行分配的,回收也是进程运行结束时系统自动回收。

      ②堆的空间较大,栈的空间小,一般申请大的内存都在堆上。


2.栈帧的详细解释:http://blog.csdn.net/yxysdcl/article/details/5569351




本文出自 “无心的执着” 博客,谢绝转载!

论‘进程’相关操作

标签:进程、exit、atexit、栈帧、fork、execve

原文地址:http://10740590.blog.51cto.com/10730590/1829593

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!