程序与进程的区别
程序是静态的概念,gcc xx.c -o pro,磁盘中生成的pro文件,就叫做程序。相当于windows中桌面上的软件快捷方式,在不运行的时候就可以称作是一个程序。
进程是动态的概念.进程是程序的一次运行活动,通俗来讲就是程序跑起来了,系统中就多了一个进程。相当于windows中桌面上的软件被打开了,在运行了,就可以称作是一个进程。
如何查看系统中有哪些进程
- 使用ps指令来查看。
实际工作中,配合grep来查找程序中是否存在某一个进程。
示例:
1.linux提供的ps指令
2.ubantu中的pa指令,查看全部进程
3.使用grep和ps指令查找init进程
- 使用top指令查看。类似windows任务管理器
示例:
什么是进程标识符
每一个进程都有一个非负整数表示的唯一ID,叫做pid,类似身份证。
pid=0:成为交换进程(swapper),作用是进程调度。
pid=1:init进程,作用是系统初始化。
getpid()可以获取自己的进程ID.
示例:
什么叫父进程,什么叫子进程
进程A创建了进程B,那么A叫做父进程,B叫做子进程,父子进程是相对的概念,有点类似java中继承的关系,或者直接理解为人类父子的关系。
C程序的存储空间是如何分配的
- 正文段:
这是由cpu执行的机器指令部分。通常,正文段是可以共享的,所以即使是繁琐执行的程序(如文本编辑器、C编译器和shell等)在存储器中也只需要一个副本,另外正文段常常是只读的,以防止程序由于意外修改其自身的指令。
- 初始化数据段:
通产将此段称为数据段,它包含了程序中需明确的赋初值的变量。例如:int maxcount=99;
- 非初始化数据段:
通常将此段称为bss段,这一名称来源于一个早期的汇编运算符,意思是“block started by symbol”(由符号开始的块),在程序开始执行之前,内核将此段中的数据初始化为0或空指针。出现任何函数外的C声明long sum[100];使此变量存放在非初始化数据段中。
- 栈:
自动变量以及每次函数调用时所需保存的信息都保存在此段中。每次调用函数时,其返回地址以及调用者的环境信息(例如某些机器寄存器的值)都存放在栈中。然后,最近被表用的函数在栈上为其自动和临时变量分配存储空间。通过以这种方式使用栈,可以递归调用C函数。递归函数每次调用自身时,就使用一个新的栈帧,因此一个函数调用示例中的变量集不会影响另一个函数调用示例中的变量。
- 堆:
通常在堆中进行动态存储分配,由于历史上形成的惯例,堆位于非初始化数据段和栈之间。