systemd是linux启动的第一个进程。systemd进程产生子进程,而它的子进程又产生子进程。由此使得系统运作。
当父进程结束时,子进程也随之结束,但是子进程结束时,父进程不一定结束。若出现父进程结束,但是子进程没有结束的情况,该子进程称为孤儿进程,且其资源无法释放,唯一的方法就是找其他的进程作为该进程的父进程,或是直接使得systemd进程作为其父亲进程,并结束孤儿进程并释放其资源。
pstree :显示系统中完整的进程树
-a:显示完整的命令
-p:显示对应命令的pid
pstree -ap 用户名:可以显示与当前用户相关的进程以及对应的进程号,对应内容如下图所示:
pidof 程序:查看该进程的相关进程ID
ps :不加选项只显示当前用户当前终端的进程
pts代表着远程连接的伪终端,tty代表着本地打开的虚拟终端。
进程的信息查看有两种方式,也是两种风格,一种就是ps aux另一种就是ps -ef 的方式
ps
a:显示与当前终端有关的进程,包括其他用户的进程
x:显示与当前终端无关的进程
u:以更详细的方式去显示
例子:ps aux,显示的列如下:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
USER:进程的所属这
PID:进程ID
%CPU:CPU占用率
%MEM(memory):内存占用率
VSZ:虚拟内存集的大小
RSS:常驻内存集的大小
TTY:进程所处终端,pts表示远程连接的伪终端,?表示该进程由系统启动
STAT:进程的状态,R代表可运行,S代表可中断的等待状态,D代表不可中断的等待状态,Z代表僵尸进程,+代表前台进程,l代表多线程进程,N代表低优先级进程,<代表搞优先级进程,s代表时开启了多个子进程的会话领导者。
START:进程的开始时间
TIME:从启用到现在占用的CPU的时间
COMMADN:开启该进程的程序命令,如果时[]括号括住的内容,则代表该程序命令时系统产生的
ps
-e:显示系统中所有进程的信息
-f:显示进程的所有信息
列出的信息列如下所示:
UID PID PPID C STIME TTY TIME CMD
UID:所属用户的ID
PID:进程ID
PPID:父进程ID
C:CPU占用率
STIME:进程开始时间
TTY:进程所属终端,?代表时系统产生的进程,pts代表是远程连接产生的伪终端你,tty是本地的虚拟终端
TIME:占用CPU的时间
CMD:对应的程序命令
总的来说两个查看进程的方式差不多。
top动态进程信息
top - 18:01:25 (系统时间) up 4:02(登录时间), 3 users(终端的用户数), load average: 0.00, 0.02, 0.05(这个代表1分钟,5分钟,15分钟内平均的内核使用数)
Tasks: 215 total(总的任务数), 1 running(正在运行的数目), 214 sleeping(睡眠的数目), 0 stopped(停止的数目), 0 zombie(僵尸进程数目)
%Cpu(s): 0.3 us(用户进程的CPU使用率), 0.0 sy(系统进程的CPU使用率), 0.0 ni,
99.7 id(空闲进程的CPU占用率), 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 995748 total(总内存), 107040 free(空闲内存), 663128 used(以用内存), 225580 buff/cache(内核缓存)
KiB Swap: 2097148 total(总交换分区大小), 2042896 free(空闲的交换分区大小), 54252 used(已经使用的交换分区大小). 175700 avail Mem(可用交换分区大小)
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
top命令的状态下,
按P:以占用CPU百分比排序
按M:以占用内存百分比排序
按T:以占用CPU的时间排序
按N:以进程启动时间排序
以上排序都是从大到小排序
top的选项
top -d x:可以调整top命令刷新的时间间隔
top -A:可以显示所有的进程
top -o xx:可以指定只显示某些列
僵尸进程的过滤
我们可以这样输入top命令,如top -A -o stat,pid,ppid,%cpu,%mem|grep "^Zz",我们首先利用-A和-o指定输出某些固定列,同时指定进程的状态位首列,然后我们利用grep过滤选择以Zz打头的行,因为stat是首列,所以以Zz打头的行就是对应的僵尸进程
proc目录
proc目录的数据并不是存放在硬盘当中,而是存放在内存当中,换而言之,proc目录中存放的是正在处理的内存中的数据。
进程的后台启动
jobs:查看后台进程,以及对应的后台作业ID
-l:显示后台进程的PID
在要执行的程序后面加上是那个“&”即可将进程转换为后台进程,且后台的进程是处于运行状态,若输入ctrl+Z,则是将程序转为后台的停止进程。
bg 后台作业ID(back ground):将后台停止的进程重新执行
fg 后台作业ID(front ground):将后台进程转换为前台进程
nohup命令
一般来说命令总是在终端上输入并执行的,如果执行进程所在的终端关闭了,那么对应的进程也会关闭,所以若我们解除进程与终端的关系,即即便终端关闭,该进程依然可以继续执行,且该进程的执行者变为系统,而不是终端。
nohup 想要解除的后台进程的命令 ,如nohup nc -lp 6000&,注意要再命令的尾部加上“&”符号,使其再后台运行,输入之后即使终端关闭,它的执行者也会自动切换至系统
进程终止命令
kill 进程ID(正常情况)
kill -9 进程ID :当遇到正常情况下不能结束的进程的时候,可以使用该命令强制地终止。
killall 程序名 :可以清除某个程序开启地所有进程
killall -9 程序名:可以强制地杀死该程序地所有进程
killall -9 -u 用户名 :可以杀死某个用户的所有进程