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