论‘进程’相关操作

2019-07-14 12:24发布

★进程相关概念        (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的使用方法:wKiom1eVgOjA0MHWAAB1SP7g2ro560.png
        运行结果:wKiom1eVganyzrMKAAAR-BtYeMg291.png
★进程终止      进程终止有以下几种方式:             (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                   头文件:#include                      void exit(int status);                                int atexit(void (*fun)(void));
     一个进程可以登记若干个函数,这些函数由exit自动调用,这些函数被称为终止处理函数,atexit函数就可以登记这些函数。exit调用终止处理函数的顺序和atexit登记的顺序是相反的,如果一个函数可以被多次的登记,也可以被多次的调用。    wKioL1eVjNeyY5DEAABjm3-k2jg697.png     运行结果:wKioL1eVjWKAk_mcAAAryMshYj8146.png
★栈帧1.堆栈      堆栈是C语言以及其他语言运行时必须使用的一块空间,它的主要作用是函数调用、传递参数、保存返回地址、提供局部变量空间的。      ①堆需要程序员自己申请,并且需要显示的进行释放,申请和释放必须是成对出现的,要不然就会出现内存泄漏,因为堆上的空间生命周期都是一直存在,直到手动进行释放。而栈是系统自动进行分配的,回收也是进程运行结束时系统自动回收。      ②堆的空间较大,栈的空间小,一般申请大的内存都在堆上。
2.栈帧的详细解释:http://blog.csdn.net/yxysdcl/article/details/5569351


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