Linux进程管理

发布时间 2023-11-28 23:38:43作者: 田子昕

一、Linux下的进程

每个用户均可同时运行多个程序。为了区分每一个运行的程序,Linux给每个进程都做了标识,称为进程号(process ID),每个进程的进程号是唯一的。

Linux 给每个进程都打上了运行者的标志,用户可以控制自己的进程:给自己的进程分配不同的优先级,也可以随时终止自己的进程。

  • 进程从执行它的用户处继承UID、GID,从而决定对文件系统的存取和访问。

Linux 不可能在一个 CPU 上同时处理多个任务(作业)请求,而是采用 “分时” 技术来处理这些任务请求。

使用PID区分不同的进程

  • 系统启动后的第一个进程是init,它的PID是1。init是唯一一个由系统内核直接运行的进程。
  • 除了init之外,每个进程都有父进程(PPID标识)
  • 每个进程还有四个与用户和组相关的识别号
    • 实际用户识别号 (real user ID,RUID)
    • 实际组识别号 (real group ID,RGID)
    • 有效用户识别号 (effect user ID,EUID)
    • 有效组识别号 (effect group ID,EGID)

 

  1. RUID和RGID的作用:识别正在运行此进程的用户和组。
  2. EUID和EGID的作用:确定一个进程对其访问的文件的权限。

进程类型:

  • 交互进程
    • 由一个Shell启动的进程。
    • 交互进程既可以在前台运行,也可以在后台运行。
  • 批处理进程
    • 不与特定的终端相关联,提交到等待队列种顺序执行的进程。
  • 守护进程(Daemon)
    • 在Linux在启动时初始化,需要时运行于后台的进程。

 

进程的启动方式:

  • 手工方式:使用操作系统提供的用户接口
    • 前台
    • 后台 (&)
  • 调度方式:按照预先指定的时间执行
    • at
    • batch
    • cron

 

前台进程:

  • 指一个程序控制着标准输入/输出,在程序运行时,shell 被暂时挂起,直到该程序运行结束后,才退回到 shell。在这个过程中,用户不能再执行其它程序

后台进程:

  • 用户不必等待程序运行结束就可以执行其它程序。运行后台进程的方法是在命令行最后加上 “&”

进程和作业的区别:

  • 进程:操作系统的概念,由操作系统负责管理
  • 作业:shell程序的概念,由shell程序负责管理
    • 一个操作系统可以启动多个shell程序,shell本身也是一个进程
    • 一个作业里至少包含一个进程,也可以包含多个进程作业分前台和后台运行之分

 

查看进程

Linux 系统提供了一些命令来查看进程。常用的进程查看命令包括:

  • ps:显示当前系统中的所有进程。
  • top:实时显示当前系统中的进程状态。
  • pstree:显示进程的树形结构。

信号控制进程

信号是一种软件中断,可以用来控制进程的运行。Linux 系统支持多种信号,其中常用的信号包括:

  • SIGKILL:终止进程。
  • SIGINT:中断进程。
  • SIGQUIT:终止进程并产生 core 文件。
  • SIGSTOP:停止进程。
  • SIGCONT:恢复进程的运行。

进程优先级

进程优先级用于决定进程的调度顺序。优先级越高的进程越有可能被调度执行。Linux 系统中的进程优先级范围为 -20 到 20。

调整进程优先级

openEuler 中使用 nice 和 renice 调整进程的 nice 值,进而影响进程优先级
nice 命令语法,优先序(adjustment 取值范围 -19 ~ 20):

nice [-n adjustment][command][arg...]]

例如,将 vi 运行的优先级设置为 -18:

nice -n -18 vi &

作业控制

作业是指由一个或多个进程组成的集合。作业控制用于管理多个进程的运行。Linux 系统提供了一些命令来控制作业。常用的作业控制命令包括:

  • bg:将暂停的进程转到后台运行。
  • fg:将后台进程转到前台运行。
  • jobs:列出当前系统中的所有作业。

进程管理示例

以下是一个使用 ps 命令查看进程的示例:

$ ps
  PID TTY TIME CMD
 1234 pts/0 00:00:00 bash
 1235 pts/0 00:00:00 ps

以下是一个使用 kill 命令终止进程的示例:

$ kill -9 1235

以下是一个使用 bg 命令将进程转到后台运行的示例: