Skip to content

Latest commit

 

History

History
198 lines (114 loc) · 4.56 KB

进程环境与进程属性.md

File metadata and controls

198 lines (114 loc) · 4.56 KB

「 进程环境与进程属性 」

💬 什么是进程

  定义: 简单说来,进程就是程序的一次执行过程。

进程至少有三种基本状态。这三种基本状态是:运行态、就绪态和封锁态(或等待态),进程的状态可依据一定的条件和原因而变化

💬 进程的状态

其中:可中断等待进程可以被信号中断;不可中断等待进程直接在硬件条件等待,并且任何情况下都不可中断。

  • 孤儿进程

    • 因父亲进程先退出而导致一个子进程被 init 进程收养的进程为孤儿进程

    • 举例:orphan.c

  • 僵死进程

    • 已经退出但还没有回收资源的进程为僵死进程

    • 举例:dead.c

💬 进程的模式和类型

  • 进程的模式: 在 Linux 系统中,进程的执行模式划分未 用户模式内核模式

  • 进程的类型: 按照进程的功能和运行的程序来分,进程划分为两大类:一类是 系统进程,另一类是 用户进程

💬 进程的属性

  • 进程号(PID)

  • 父进程号(PPID)

  • 进程查看方式

    • ps aux——进程信息查看,但不是动态显示

    • ps auxf——以树状方式查看进程

    • top——实时查看进程状态

    • 输出项解释:

      • USER:进程的属主

      • PID:进程的 ID 号

      • PPID:父进程的 ID 号

      • %CPU:进程占用的 CPU 百分比

      • %MEM:占用内存的百分比

      • NI:进程的 NICE 值,数值大,表示较少占用 CPU 时间,负值优先级最大

      • VSZ:进程虚拟大小

      • RSS:驻留中页的数量

      • WCHAN:正在等待的进程资源

      • TTY:终端 ID

      • STAT:进程状态

      • START:启动进程的时间

      • TIME:进程消耗 CPU 的时间

      • COMMAND:命令的名称和参数

  • 会话与进程组的特点

    • 一个会话可以由一个控制终端,建立于控制终端连接的会话首进程被称为控制进程

    • 一个会话中的几个进程组可分为一个前台进程组合几个后台进程组,如果会话有一个控制终端,则有一个前台进程组

    • 无论何时在控制终端键入或监测,将会有信号发送给前台进场组的所有进程

    • 进程组号注意事项:

      • 进程组号等于创建进程号,当创建进程退出,只要该进场组存在一个进程,该进程组就存在

      • 设置进程组号,前后参数相等,即当前进程转换为进程组长

  • 进程组号(PPID)

    • 获取进程组号函数:

      extern pid_t getpgid(pid_t pid);
    • 设置进程组号函数:

      int setpgid(pid_t pid, pid_t pgid);
  • 会话

    • 描述:一个或多个进程组的集合

    • 函数:

      extern pid_t getsid(pid_t pid);
      extern pid_t setsid(void)
  • 控制终端

    • 函数:

      pid_t tcgetpgrp(int filedes);
      pid_t tcgetpgrp(int filedes, pid_t pgrpid);
      pid_t tcgetsid(int filedes);
  • 真实用户号(RUID)

    • 作用:创建该进程的用户 UID

    • 函数:

      extern uid_t getuid(void);
  • 有效用户号(EUID)

    • 作用:有效 UID 一般与 UID 相同,但是在设置 setuid 位后则不同

    • 函数:

      extern uid_t geteuid(void);
  • 进程用户组号(GID)

    • 作用:创建该进程的用户所在的组号 GID

    • 函数:

      extern uid_t getgid(void);
  • 有效进程用户组号(EGID)

    • 作用:有效 GID 一般与 GID 相同,但是在设置 setgid 位后则不同

    • 函数:

      extern uid_t getegid(void);
- End -