已整理-Linux进程概念与常用操作

 

目录:

  1、进程的一些概念

  2、显示进程树-pstree

  3、查看进程快照-ps

  4、进程动态排名-top

  5、检索进程-pgrep

  6、进程的前后台调度

  7、杀死进程-(kill/killall/pkill)

  

 

1、进程的一些概念
进程:动态的代码,占用内存+CPU
进程有唯一的标识:PID ,也就是进程编号;父进程是:PPID

进程由父进程创建,父进程创建子进程;
在结束进程的时候,父进程会杀死所有的子进程,再结束父进程;

【僵尸进程】->没有死透的进程,进程以为自己死了,但实际还占用CPU+内存,处理方法是杀死僵死进程;

【孤儿进程】->父进程被杀死,留一下个子进程,没有父进程管它了,可能会疯狂的占用CPU+内存资源;

 

2、显示进程树-pstree
pstree 命令显示进程树,常用格式:

-a   显示完整的命令行
-p   列出对应的PID编号

 

# pstree
systemd─┬─NetworkManager───2*[{NetworkManager}]
├─VGAuthService
├─agetty
├─auditd───{auditd}
├─ceph-crash
├─ceph-mds───14*[{ceph-mds}]
├─ceph-mgr───31*[{ceph-mgr}]
├─ceph-mon───23*[{ceph-mon}]
├─2*[ceph-osd───54*[{ceph-osd}]]
├─chronyd
├─crond
├─dbus-daemon
├─irqbalance
├─lvmetad
├─node_exporter───4*[{node_exporter}]
├─polkitd───6*[{polkitd}]
├─radosgw───580*[{radosgw}]
├─rsyslogd───2*[{rsyslogd}]
├─smbd─┬─cleanupd
│ ├─lpqd
│ ├─smbd
│ └─smbd-notifyd
├─sshd─┬─2*[sshd───bash]
│ └─sshd───bash───pstree
├─systemd-journal
├─systemd-logind
├─systemd-udevd
├─tuned───4*[{tuned}]
└─vmtoolsd───{vmtoolsd}

 

systemd 是所有进程的父进程,完成开机的一些初始化工作;
systemd 还会定期巡检是否有【孤儿进程】,会接受所有的孤儿进程,并杀死【孤儿进程】;

# pstree lisi         #查看 lisi 开启的进程
bash───vim

# pstree -ap lisi        #查看 lisi 开启的进程,树状显示
bash,100313
└─vim,100344 test.txt

 

3、查看进程快照-ps
ps->Processes Snapshot
-格式:ps [选项]...

常用命令选项:

-aux:   显示当前终端所有进程(a)、当前用户在所有终端下的进程(x), 以用户格式输出
-elf:   显示系统内所有进程(-e)、以长格式输出(-l)、信息包括最完整的进程信息(-f)
# ps aux 
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 191308 4180 ? Ss May30 0:15 /usr/lib/systemd/systemd --system --deserialize 16

格式详解:
USER:     用户
PID:     进程ID
%CPU:     占用CPU
%MEM:     占用内存
VSZ:     占用虚拟内存
RSS:     固定内存
TTY:     终端
STAT:   状态
TIME:     起始时间
COMMAND:   执行的命令

 

# ps -elf           #相较于ps aux , 可以快速的找到进程的父进程PPID这一列,还有NI,优先级
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
4 S root 1 0 0 80 0 - 47827 ep_pol May30 ? 00:00:15 /usr/lib/systemd/systemd --system --deserialize 16

 

4、进程动态排名-top
top 交互式工具,格式:
语法格式:top [-d 刷新秒数] [-U 用户] [-n 显示次数]
其中-n 指定显示次数后,到了指定的次数后,就会自动退出交换界面;

进入top交互后,按:
大写P, 进程CPU占用排名,由高到低排名
大写M, 进程内存占用排名,由高到低排名

 

top头部字段描述:

top - 16:58:33 up 8 days, 23:44, 3 users, load average: 0.00, 0.01, 0.05        #当前时间 | 开机时间 | 登陆用户数量 | 负载 1分钟 5分钟 15分钟
Tasks: 187 total, 2 running, 185 sleeping, 0 stopped, 0 zombie              #任务进程信息
%Cpu(s): 0.1 us, 0.0 sy, 0.0 ni, 99.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st        #CPU利用率
KiB Mem : 7990272 total, 334756 free, 3915228 used, 3740288 buff/cache          #内存利用率
KiB Swap: 6160380 total, 6160380 free, 0 used. 3748972 avail Mem              #swap利用率

 


5、检索进程-pgrep
用途: pgrep [选项]... 查询条件

常用命令选项:

-l     输出进程名,而不仅仅是PID
-U     检索指定用户的进程
-x      精确匹配完整的进程名

 

# pgrep -l -U lisi bash      #查看lisi 执行的bash命令进程
100313 bash

 


6、进程的前后台调度
前台启动:输入正常命令行,运行期间占用当前终端
后台启动:在命令行末尾 【&】符号,不占用当前终端

示例:
# cp /dev/cdrom mycd.iso &    #后台制作ISO镜像文件
[2] 22378

 


【Ctrl+z 组合键】:    挂起当前进程(暂停并转入后台)
【jobs命令】:      查看后台任务列表
【fg命令】:       将后台任务恢复到前台运行,缺省序号则为最近1个任务
【bg命令】:       激活后台被挂起的任务,缺省序号则为最近1个任务
【Ctrl+c 组合键】:    结束当前进程,当进程调度到前台时,可以按这个键结束;

 

示列:

# sleep 800              #睡眠 800s 占用当前前台操作,按Ctrl+z 组合,暂停并转入后台
^Z
[1]+ Stopped sleep 800

# jobs                  #可以看到后台的进程,编号为:1
[1]+ Stopped sleep 800

# fg 1                  #又调度到前台了,再按ctrl+z 再暂停并转入后台,如果按ctrl+c 就结束进程了
sleep 800

# bg 1                  #后台激活进程
[1]+ sleep 800 &
# jobs
[1]+ Running sleep 800 &

 

7、杀死进程-(kill/killall/pkill)
干掉进程的不同方法:

> ctrl+c组合键,中断当前命令程序
> kill [-9] PID / kill [-9] %后台任务编号
> killall [-9] 进程名
> pkill 查找条件

 

示例:

# killall -9 vim         #杀死同名的多个进程
# pkill -9 -U lisi        #强制踢出用户

# jobs
[1]+ Running sleep 800 &
# kill -9 %1             #杀死后台进程
[1]+ Killed sleep 800

 

以上命令全部支持以下杀死信号:
> 1 (HUP):重新加载进程。
> 9 (KILL):强制杀死一个进程。
> 15 (TERM):正常停止一个进程。

 

posted on 2022-06-08 18:05  tengq  阅读(244)  评论(0)    收藏  举报

导航