Linux进程基础:从入门到精通

我们可以使用ps命令来列出当前运行的所有进程信息:表示同时显示没有控制终端(TTY)关联到任何命令上面运行着的任何程序,这时可以使用kill命令来发送信号给指定PID的进程。

作为一名Linux系统管理员,熟练掌握进程管理是必不可少的技能之一。本文将从最基础的概念开始,深入浅出地介绍Linux进程的相关知识。

什么是进程?

在操作系统中,进程是指正在运行的程序实例。每个进程都有自己独立的内存空间和资源,可以与其他进程进行通信和交互。

在Linux中,每个进程都由一个唯一的PID(Process ID)标识符来表示。PID是一个整数值,在系统范围内唯一。

如何查看当前运行的所有进程?

我们可以使用ps命令来列出当前运行的所有进程信息:

“`

$ ps aux

其中,“a”表示显示所有用户(包括其他用户创建),“u”表示以详细模式显示输出信息,“x”表示同时显示没有控制终端(TTY)关联到任何命令上面运行着的任何程序。

输出结果类似于下面这样:

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

root 1 0.0 0.2 168924 10848 ? Ss Sep23 0:04 /usr/lib/systemd/systemd –switched-root –system –deserialize 22

root 2 0.0 0.0 0 0 ? S Sep23 0:00 [kthreadd]

root 3 0.1 10.4 – – ? S Sep23 7:51 [ksoftirqd/0]

其中,每列的含义如下:

– USER:进程所属用户

– PID:进程标识符

– %CPU:CPU使用率

– %MEM:内存使用率

– VSZ:虚拟内存大小(单位为KB)

– RSS:实际物理内存大小(单位为KB)

– TTY:控制终端号码(若没有则显示“?”)

– STAT:进程状态代码,如S表示休眠(sleeping)、R表示运行中(running)等。

– START:进程启动时间

– TIME: 进程占用CPU时间总和

如何杀死一个进程?

有时候我们需要手动结束某个运行中的程序实例。这时可以使用kill命令来发送信号给指定PID的进程:

$ kill

Linux进程基础:从入门到精通

其中,“”是要结束的目标进程的PID。

如果想要强制杀死一个无法响应正常终止信号的进程,可以使用“kill -9”命令:

$ kill -9

该命令会向指定PID发送SIGKILL信号,直接终止进程。

如何后台运行一个进程?

有时候我们需要在后台运行某个长时间的程序实例,而不希望它占用当前的控制终端。这时可以使用nohup命令来启动该程序:

$ nohup &

其中,“”是要执行的命令或脚本。该命令会将指定的命令在后台作为一个新进程运行,并将输出重定向到文件“nohup.out”中。

如果想要检查该进程是否正在运行,可以使用pgrep命令:

$ pgrep -f

其中,“-f”选项表示搜索包含指定字符串的命令。

如何限制进程资源使用?

有些时候我们需要限制某个特定用户或组内所有用户能够使用系统资源(如CPU、内存、磁盘等)的数量。这时可以使用cgroups(Control Groups)机制来实现资源管理和隔离。

以下是一些常见cgroups相关工具和配置文件:

– cgcreate:创建新cgroup

– cgexec:在指定cgroup中执行任务

– cgclassify:将已存在任务加入到指定cgroup中

– cgrules.conf:定义基于规则匹配自动分类任务到对应cgroup

例如,下面是一个简单示例,演示了如何创建并限制一个用户(user1)的CPU使用率为20%:

$ sudo cgcreate -g cpu:/cpulimit

$ sudo cgset -r cpu.cfs_quota_us=20000 cpulimit

$ sudo cgclassify -g cpu:/cpulimit

其中,“-g”选项表示指定控制组类型和名称,如“cpu:/cpulimit”表示创建一个名为“cpulimit”的CPU控制组。cgset命令可以设置该cgroup的资源限制,如“cpu.cfs_quota_us=20000”表示限制该cgroup中进程的CPU使用时间不超过20%。

本文介绍了Linux进程管理的基础知识和常用命令,包括查看当前运行的所有进程、杀死指定PID的进程、后台运行程序以及限制资源使用等。希望读者们能够从中学到有用的知识,并将其应用于实际工作中。