1PCB

每个进程在内核中都有一个进程控制块(PCB)来维护进程相关的信息,Linux内核的进程控制块是task_struct结构体。grep -r “task_struct” /  可以查找根目录下,包含task_struct的文件文件。或者 find /usr -name sched.h。从而,在/usr/include/linux/sched.h文件中可以查看struct task_struct 结构体定义。其内部成员有很多,我们重点掌握以下部分即可:

(1)进程id。系统中每个进程有唯一的id,在C语言中用pid_t类型表示,其实就是一个非负整数

(2)进程的状态,有就绪、运行、挂起、停止等状态。

(3)进程切换时需要保存和恢复的一些CPU寄存器的值。

(4)描述虚拟地址空间的信息(如虚拟地址与物理地址之间的映射关系)。

(5)描述控制终端的信息(桌面终端、文字终端和设备终端,pts/0或者tty0等)。

(6)当前工作目录(当前进程的工作目录)。

(7)umask掩码(对文件的一种保护机制,文件权限)。

(8)文件描述符表,包含很多指向file结构体的指针。

(9)和信号相关的信息。

(10)用户id和组id。

(11)会话(Session)和进程组(功能相似的一些进程组成一个进程组)。

(12)进程可以使用的资源上限(Resource Limit)。(ulimit –a命令可以查看)

2ulimit命令详解

ulimit -a命令用来显示各种进程能够使用的资源上限(显示并控制shell启动的程序或进程所能够使用的资源上限,ulimitshell内建命令),Linux对于每个用户,系统限制其最大进程数,为提高性能,可以根据设备资源情况,设置个Linux用户的最大进程数,一些参数需要设置为无限制,如:数据段长度:ulimit -d unlimited     最大内存大小:ulimit -m unlimited      堆栈大小:ulimit -s unlimited

在用这个命令的时候主要是为了产生core文件,就是程序运行发行段错误时的文件ulimit -c unlimited    从而产生core文件。

[root@localhost ~]# ulimit -a

core file size          (blocks, -c) 0

data seg size           (kbytes, -d) unlimited

scheduling priority             (-e) 0

file size               (blocks, -f) unlimited

pending signals                 (-i) 14473

max locked memory       (kbytes, -l) 64

max memory size         (kbytes, -m) unlimited

open files                      (-n) 1024

pipe size            (512 bytes, -p) 8

POSIX message queues     (bytes, -q) 819200

real-time priority              (-r) 0

stack size              (kbytes, -s) 8192

cpu time               (seconds, -t) unlimited

max user processes              (-u) 14473

virtual memory          (kbytes, -v) unlimited

file locks                      (-x) unlimited

如果需要修改open files (-n) 1024的值,命令就是limit -n 2048(随各自需要设置),其余类似。

参数解释:

   -a  显示目前资源限制的设定。 
       -c <core文件上限>  设定core文件的最大值,单位为区块。 
       -d <数据节区大小>  程序数据节区的最大值,单位为KB。 
       -f <文件大小>  shell所能建立的最大文件,单位为区块。 
       -H  设定资源的硬性限制,也就是管理员所设下的限制。 
       -m <内存大小>  指定可使用内存的上限,单位为KB。 
       -n <文件数目>  指定同一时间最多可开启的文件数。 
       -p <缓冲区大小>  指定管道缓冲区的大小,单位512字节。 
       -s <堆叠大小>  指定堆叠的上限,单位为KB。 
       -S  设定资源的弹性限制。 
       -t <CPU时间>  指定CPU使用时间的上限,单位为秒。 
       -u <程序数目>  用户最多可开启的程序数目。 
       -v <虚拟内存大小>  指定可使用的虚拟内存上限,单位为KB。

3)进程状态

进程基本的状态有5种。分别为初始态(创建),就绪态,运行态,挂起态与终止态。其中初始态为进程准备阶段,常与就绪态结合来看。

 

Logo

更多推荐