📜  LinuxUnix 中的进程(1)

📅  最后修改于: 2023-12-03 15:02:44.966000             🧑  作者: Mango

Linux/Unix 中的进程

在 Linux/Unix 操作系统中,进程是系统中最基本的执行单元,它代表了正在运行的程序。进程拥有一些资源,如 CPU、内存、文件描述符等,可以创造、销毁、终止、等待和通信。

进程的属性

每个进程都有自己的进程属性,包括进程 ID、进程状态、进程名、PID(Parent Process ID 父进程 ID)、PPID(Parent Process ID 父进程的父进程 ID)、UID(User ID 用户 ID)、GID(Group ID 组 ID) 、进程优先级等。

进程 ID

每个进程都有一个唯一的 PID(进程 ID),它是一个非负整数,用于标识系统中的各个进程。PID 0 是系统中的 Swapper 进程,PID 1 是 init 进程。

进程状态

进程有五种状态:

  • 运行 (R):进程正在运行或者在运行队列中等待 CPU 资源。
  • 就绪 (S):进程已经准备好在任何时刻运行。
  • 等待 (D):进程正在等待某个条件(如等待 IO 完成)。
  • 停止 (T):进程已经被暂停或者接收到了信号停止。
  • 僵死 (Z):进程已经终止,但是它的父进程并没有释放它的资源。
进程名

进程名是一个文本字符串,用于标识进程的名称。进程名并不一定要与二进制程序的名称相同。

父进程 ID

PPID 是指父进程的 PID,每个进程都有一个父进程,除了 swapper 进程 (PID=0) 以外,所有进程都有父进程。

用户 ID 和组 ID

UID 和 GID 表示进程运行的用户和用户组。在 Linux/Unix 下,每个对象都有一个 UID 和 GID,而每个用户可以属于多个组。

进程优先级

Linux/Unix 中的进程拥有不同的优先级,用于确定进程的调度顺序。默认情况下,进程的优先级相等,但是我们可以使用 nice 命令来增加进程的优先级。

进程控制

Linux/Unix 中的进程控制包括创建、销毁、等待和通信等操作。

进程的创建

进程可以通过调用 fork() 系统调用来创建子进程。fork() 调用成功后,父进程复制自己的内存空间、打开的文件和系统资源,并在子进程中运行。子进程会从 fork() 返回处开始执行,同时得到一个新的 PID。可以使用 exec() 系统调用来替换进程映像。

进程的销毁

进程可以通过调用 exit() 系统调用来自我销毁。父进程可以使用 wait() 系统调用等待子进程结束并回收资源。kill() 系统调用可以向任何进程发送信号来终止进程。

进程的等待与通信

进程可以通过等待(wait() 系统调用)来阻塞并等待子进程结束,同时回收子进程的资源。还可以使用 waitpid() 系统调用来等待特定的子进程结束。

进程可以使用信号(signal)来通信。 kill() 系统调用可以向任何进程发送信号。当进程接收到一个信号时,它可以采取不同的操作,如终止、暂停、忽略等。

进程管理工具

Linux/Unix 中的进程管理工具包括 ps、top、htop、pgrep、kill、pkill 等。

ps

ps 命令用于显示系统中当前运行的进程。常用选项如下:

  • -a:显示所有进程。
  • -u:显示指定用户的进程。
  • -e:显示所有进程,包括不属于当前用户的进程。
top

top 命令用于动态地显示系统中当前运行的进程。它能够实时地更新屏幕内容,展示进程的各种属性,如 CPU 占用率、内存使用等。常用选项如下:

  • -d:指定更新间隔时间。
  • -p:显示指定 PID 的进程。
  • -U:显示指定用户的进程。
htop

htop 是一个交互式的 top 命令替代工具。它可以实时更新进程信息,支持鼠标、键盘操作,更加友好。

pgrep、kill、pkill

pgrep 命令用于查找进程,并返回对应 PID。可以与 kill 命令配合使用,向指定进程发送信号。

pkill 命令可以根据进程名杀死进程,简化了查找对应 PID 的过程。

结语

Linux/Unix 中的进程是系统中最基本的执行单元。通过对进程属性、进程控制、进程管理工具的介绍,相信读者已经对 Linux/Unix 中的进程有了初步的了解。