【Linux】进程
一.进程
在了解进程之前,我们首先需要弄清楚什么是程序。
在 Linux 系统中,程序本质上是一组静态
的可执行指令,通常以文件
的形式存在于磁盘上。比如我们常用的 ls 命令,它只是一个可执行程序文件,我们可以通过 which ls
来查看它的具体路径。
当我们在 Linux 上运行一个程序时,系统会为该程序创建一个独立的运行空间,这个空间中包含了程序运行所需的各种资源,例如内存、代码段、堆栈等。这个运行中的程序实例
,就是我们所说的 进程
。
简单来说,程序是静态的代码,进程是程序运行时的动态实例。
以 ls
命令为例,当我们每执行一次 ls
,Linux 系统都会为它创建一个新的进程,这个进程会有一个唯一的进程号(PID)。如果你连续多次运行 ls
,就会看到系统中出现多个不同的 ls 进程。
二.启动进程
当想要启动一个进程时(运行一个命令),主要有两种方法
前台进程
后台进程
当我们执行一个命令,比如ls
时,必须等它输出完成后,才能继续输入下一个指令。这是因为该命令在前台运行,此时终端会被该进程占用,直到它执行完毕。
但后台进程就不同了。如果我们在命令后加上一个 &
,比如 ls &
,这个命令就会在后台运行。这样,我们可以在 ls 还在输出的同时,继续在终端中输入其他指令,不必等待它执行结束。
三.列出正在运行的进程
ps -f
显示所有字段的描述
UID 此进程所属的用户 ID(运行该进程的人员)
PID
PPID 父进程 ID(启动它的进程的 ID)
C 进程的 CPU 利用率
STIME 进程开始时间
TTY 与进程关联的终端类型
CMD 启动此进程的命令
ps -e
显示所有终端的进程(包括后台和内核进程)
然后再加上f
可以显示所有字段描述
三.停止进程
kill -9 PID
四.僵尸进程和孤儿进程
当子进程被杀掉的时候,会给父进程发送一个SIGCHLD
信号,类似于让父进程做善后(执行wait()函数
)。而僵尸进程产生的原因就是这里
当父进程收到SIGCHLD
信号时,并没有执行wait()
导致子进程虽然被杀掉了,但是还一直存在,浪费系统资源
孤儿进程则是父进程先被kill,子进程没有了父进程,但是此时子进程会被系统自动分配给新的父进程init
(PID 1)
所以孤儿进程的影响比较小
五.守护进程
守护进程是在后台默默工作的程序。
比方说打印机的守护进程,一直在后台默默等候人们输入“打印”指令,才会开始工作
tty
为?的都是守护进程
六.查看进程利用率(top命令)
实时更新并显示有关物理和虚拟内存、CPU 使用率、平均负载和繁忙进程的信息。
除了top命令,还有一个类似的,htop
提供了更直观的界面和更多的功能
F1:查看帮助。
F2:配置界面(如调整显示列)。
F3:搜索进程。
F4:过滤进程。
F5:树状图显示进程关系
F6:按列排序(如 CPU%、内存%)。
F9:终止进程(kill)。
F10:退出。
七.如何识别可疑进程
1.top/htop命令查看
- CPU 占用过高:非系统/已知进程长期占用 >50% CPU。
- 进程内存
RES
持续增长且无合理原因。 - 大量进程处于 D(不可中断休眠)或 Z(僵尸)
按F6排序(CPU、MEM)
按F3搜索关键词(hack等)
2.检查进程的详细信息
ps -ef
- 随机字符命名(5as12)
- 路径异常(/tmp/.hidden)
- 参数含恶意URL
3.检查路径
ls -l /tmp/exe
4.查看网络连接
sudo netstat -tulnp | grep <PID或进程名>
- 是否存在对外连接
- 监听非服务端口(6666,2222)
5.终止并删除文件:
kill -9 PID
rm -f /tmp/.hidden