进程和信号
1. 什么是进程
unix标准把进程定义为:“一个其中运行着一个或者多个线程的地址空间和这些线程所需要的系统资源。”,非官方的来说——进程可以看作正在运行的程序。
2. 进程的结构
2.1 进程表
Linux进程表就像一个数据结构,他把当前加载在内存中的所有进程的有关信息保存在一个表中,其中包括进程的PID、进程的状态、命令字符串和其他一些ps命令输出的各类信息。进程表的长度是有限的,所以进程不能无限的被创建。早期的unix系统只能同时运行256个进程,目前的版本可同时运行的数量比早期多得多得多,这个数量和内存容量有关。
2.2 查看内存
命令 ps 详细说明http://man.linuxde.net/ps
如ps -ef
部分参数解释
- pid 进程号
- ppid 父进程号
- stime 开始的时间
- tty 虚拟终端
- cmd 显示启动进程所用的命令
2.3 进程调度
在一台单独处理器计算机上,同一时间只能有一个进程可以运行,其他进程处于等待运行的状态。每个进程轮到的运行时间(我们称为时间片)是相当短暂的,这就给人一种多个程序同时运行的错觉。
linux内核用进程调度器来决定下一个时间片应该分配给那个进程。它判断的依据是根据进程的优先级。优先级高的进程运行的更为频繁。而其他的进程。如低优先级的后台任务的就不是非常频繁。在linux中,进程的运行时间不可能超过分配给他们的时间片,他们采用的是抢先式度任务处理。所以进程的挂起和继续运行无需彼此之间协作。
在一个多任务系统中,多个程序可能会竞争使用同一个资源。这种情况下,执行短期的突发性工作并暂停运行来等待输入的程序,要比持续占用处理器来进行计算或不断轮询系统来查看是否有新的输入到达的程序要更好。我们称表现良好的程序为nice程序。在某种意义上,这个nice是可以被计算出来的。操作系统通过nice值来决定它的优先级。
我们通过ps -l命令可以查看正在运行的进程的nice值
其中 NI就代表nice值
我们可以通过
renice 【更改值】 【uid】
来改变nice值从而修改优先级。
3 启动新进程
3.1 system函数启动新进程
我们可以在程序内部启动另一个程序,从而创建一个新进程,这个工作可以给函数库system来完成。
#includ