进程运行的5种状态

学习的视频

image-20210925124337787

初始态,终止态,就绪态 和 挂起态, 挂起是指的是阻塞 ,进程放弃了 CPU 的执行权限。

我们知道 ,每个进程在内核中都有一个 进程控制块 (PCB) 来维护进程相关的信息,Linux 内核的进程控制块是 task_struct 结构体

/user/src/linux-headers-3.16.0-30/include.linux/sched.h 文件中可以查看 struct task_struct 结构体定义。 其内部成员有很多,我们重点掌握以下部分即可

  • 进程 id,每个进程都有独立 id , c语言中用 pid_t 类型表示
  • 进程状态,就绪,运行,挂起,停止
  • 进程切换时候需要保存和恢复一些 CPU 寄存器
  • 描述虚拟地址空间的信息
  • 描述控制终端的信息
  • 当前工作目录 (current working direcctory)
  • umask 掩码
  • 文件描述符表, 包含指向file 结构体的指针
  • 信号相关信息
  • 用户id 和 组id
  • 进程可以使用的资源上限数 【可以用 ulimit -a 查看系统当前的配置】
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
ulimit -a
:<<EOF
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 76665
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) 76665
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

EOF

:<<EOF
我们可以看到 open files 1024 表示默认 最大打开的文件是  1024 , 前面我们也有讲过, 文件描述符表就是一个数组,默认长度  1024, 同时打开的文件超过 1024 就会有错误的。




EOF

进程的环境变量

1
2
3
4
5

echo $LANG
echo $HOME
# 通过这些可以查看我们配置的环境变量在哪里
echo $PATH

image-20210925130351501

进程里面有一块单独的区域存储环境变量的参数