C语言-进程控制编程

1.进程的定义

标准定义:进程是可并发执行的程序,是在一个数据集合上的运行过程。
通俗来说,硬盘上的一个可执行文件经常被称为程序,在Linux系统中,当一个程序开始执行后,在开始执行到执行完毕退出这段时间里,它在内存中的部分就被称作一个进程。

2.进程的分类

进程一般分为交互进程、批处理进程和守护进程三类。
守护进程总是活跃的,一般是后台运行。守护进程一般是由系统在开机时通过脚本自动激活启动或超级用户root来启动的。

3.进程的属性

进程ID(PID):是唯一的数值,用来区分进程。
父进程和父进程的ID(PPID)。
启动进程的用户ID(UID)和所归属的组(GID)。
进程状态:状态分为运行R、休眠S、僵尸Z。
进程执行的优先级。
进程所连接的终端名。
进程资源占用,如占用资源大小(内存、CPU占用量)。

4.Linux进程管理

通过进程管理工具实现,如ps(进程监视工具)、kill(终止进程工具,类似还有:killall、pkill、xkill)、grep(查询进程工具)等。

5.Linux进程的三态

就绪状态:当进程已分配到除CPU以外所有必要的资源,只要获得处理器便可立即执行,这时的进程状态称为就绪状态。
执行状态:当进程已获得处理器,其程序正在处理器上执行,此时的进程状态称为执行状态。
阻塞状态:正在执行的进程,由于等待某个事件发生而无法执行时,便放弃处理器而处于阻塞状态。引起进程阻塞的事件可有多种,如等待I/O完成、申请缓冲区不能满足、等待信件(信号)等。

6.Linux下程序是如何转化为进程的呢?

内核将程序读入内存,为程序分配内存空间;内核为该进程分配进程标识符pid和其他所需资源;内核为该进程保存PID及相应的状态信息,把进程放到运行队列中等待执行.程序转化为进程后就可以被操作系统的调度程序调度执行了。

7.Linux进程的组成

Linux中一个进程由三部分组成:代码段,数据段,堆栈段
从内存的低地址到高地址依次为:
代码段:二进制机器代码
数据段:存储已被初始化的变量,包括全局变量和已被初始化的静态变量
未初始化数据段:存储未被初始化的静态变量,又称BBS
堆:用于存放程序运行中动态分配的变量
栈:用于函数调用,保存函数的返回地址,函数的参数,函数内部定义的局部变量

8.可执行程序和内存映像的区别:

1)可执行程序位于硬盘,内存映像位于内存
2)可执行程序没有堆栈(程序被加载到内存中才会分配堆栈)
3)可执行程序中未初始化数据段并不储存在位于硬盘中的可执行文件中
4)可执行程序是静态的,不变的,内存映像动态变化

9.进程创建

1)获取进程
系统调用getpid得到进程ID,调用getppid得到父进程(创建调用该函数进程的进程)的ID
2)启动进程
fork()函数用于创建子进程。
vfork()函数用于建立一个新的进程
exec系统调用
system,system函数用于执行shell命令

10.僵尸进程

当子进程先于父进程终止,而父进程又没有调用wait函数等待子进程结束,子进程进入僵死状态,并且会一直保持下去除非系统重启.子进程处于僵死状态,内核只保存该进程的一些必要信息以备父进程所需.此时子进程始终占用着资源,同时也减少了系统可以创建的最大进程数;如果子进程先于父进程终止,且父进程调用了wait或waitpid函数,则父进程会等待子进程结束。僵尸进程几乎放弃所有内存空间,没有任何可执行代码,不能被调度,仅在进程列表中保留一个位置,但是过多的僵尸进程会导致系统崩溃。

你可能感兴趣的:(linux入门,c语言)