(1)内存维度:每个进程都独占一块地址空间,CPU处理进程实际上就是处理这个进程内存中的数据信息。这意味着,当一个进程正在执行时,它所占用的内存是不能被其他进程访问的。
(2)执行的逻辑维度:每一个进程都可以被CPU所处理和计算,此外,每一个进程也可以挂起,让其他进程得以处理。在同一个时刻,只能有一个进程被cpu所处理。这意味着,虽然操作系统可以同时运行多个进程,但是在微观上,这些进程是按照顺序依次被执行的。因此,在单核架构下,进程模型实际上是“串行”处理的。然而,在多核架构下,进程模型可以在宏观和微观上都是并行处理的。
(3)时间维度:每个进程执行一段时间之后,肯定都完成了一定的工作量。即进程是随时间向前推进的。这意味着,进程是在不断变化和发展中的,而不是静态不变的。
./program_name
来运行一个程序,并创建一个新的进程。执行态(Running)
、就绪态(Ready)
和阻塞态(Blocking)
。在执行态,一个进程正在被CPU运行;在就绪态,一个进程已经准备好被执行,但还没有被分配到CPU上;在阻塞态,一个进程由于某些原因无法继续执行,需要等待某种条件满足才能恢复执行。ps -aux
,查看进程详情PTY也称为虚拟终端或伪终端,是一种软件模拟的TTY设备。PTY允许在一个进程之间创建一个“哑”终端,使得该进程可以像真正的TTY设备一样工作。这使得一个程序可以在没有实际物理TTY设备的情况下与另一个程序进行交互,例如远程登录到另一台机器上时使用的SSH协议就是一个例子。
简单来说,TTY是硬件上的字符设备接口,而PTY是软件模拟的TTY设备。
ps
、top
和pstree
。ps
命令用于查看某个时间点的程序运作情况,能够获取关于进程的详细信息,如PID、CPU使用率、内存使用量等。而top
命令则可以实时地观察到进程的变化,显示了当前系统中各个进程的资源占用状况。此外,pstree
命令则能以树状结构展示进程之间的关系,帮助我们更好地理解系统的运行状态。通过学习和掌握这些命令的使用,我们将能够更加有效地管理和优化我们的Linux系统。ps
命令用于查看某个时间点的程序运作情况,能够获取关于进程的详细信息,如PID、CPU使用率、内存使用量等。参数 | 作用 |
---|---|
a | 和输入终端关联的所有进程,通常与x一起使用,列出完整信息。 |
x | 后台进程,通常与a 这个参数一起使用,可列出较完整信息 |
u | 有效使用者相关的进程 |
ps la | head -5
,能够观察所有系统的数据ps axjf | head -20
,连同部分程序树状态ps l
仅查看自己的bash相关的进程ps aux
观察系统所有进程属性 | 含义 |
---|---|
USER | 进程使用者 |
PID | 进程标识符 |
%CPU | 进程使用掉的CPU 资源百分比 |
%MEM | 进程所占用的物理内存百分比 |
VSZ | 进程使用掉的虚拟内存量(KBytes) |
RSS | 进程占用的物理的内存量(KBytes) |
TTY | 进程在哪个终端机上面运作,若与终端机无关则显示?, 另外, tty1-tty6 是本机上面的登入者程序,若为pts/0 等等的,则表示为由网络连接进主机的程序 |
STAT | 进程目前的状态,状态显示与ps -l 的S旗标相同(R/S/D/T/Z) |
START | 进程被触发启动的时间 |
TIME | 进程实际使用CPU运作的时间 |
COMMAND | 进程的实际命令 |
状态值 | 含义 |
---|---|
R (TASK_RUNNING ) | 指正在被CPU运行或者就绪的状态(在run_queue队列里的状态) |
S (TASK_INTERRUPTIBLE ) | 可中断的睡眠状态,处于等待状态中的进程,一旦被该进程等待的资源被释放,那么该进程就会进入运行状态 |
D (TASK_UNINTERRUPTIBLE ) | 不可中断的睡眠状态,该状态的进程只能用wake_up()函数唤醒。 |
T (TASK_STOPPED / TASK_TRACED ) | 当进程收到信号SIGSTOP、SIGTSTP、SIGTTIN或SIGTTOU时就会进入暂停状态。可向其发送SIGCONT信号让进程转换到可运行状态。 |
Z (TASK_DEAD -EXIT_ZOMBIE ) | 僵尸进程:当进程已经终止运行,但是父进程还没有询问其状态的情况。不可被kill,即不响应任务信号,无法用SIGKILL杀死。 |
top
命令则可以实时地观察到进程的变化,显示了当前系统中各个进程的资源占用状况。选项 | 含义 |
---|---|
-d | 后面可以接秒数,就是整个程序画面更新的秒数;默认5秒。 |
-b | 以批次方式执行top,还有更多参数可以使用,通常会搭配数据流重导向来将批次的结果输出成为档案。 |
-n | 与-b 搭配,作用是需要进行几次top的输出结果。 |
-p | 指定某些个PID 来进行观察监测。 |
top -d 3
,每隔三秒更新一次数据top -b -n 2
,进行两次top的输出结果pstree命令是一个在Linux系统中用于查看进程树的实用工具。这个命令可以清晰地展示各个进程之间的关系,包括哪个进程是父进程,哪个是子进程。通过使用pstree命令,用户能够直观地了解到哪些进程是由哪些进程创建的。
在Linux操作系统中,所有的进程构成了一棵进程树。这棵树的根就是PID(进程标识符)为1的init进程。每个进程都可以有多个子进程,而这些子进程又可以有自己的子进程,从而形成了一个树状结构。pstree命令就是用来显示这个进程树的。
总的来说,pstree命令提供了一个简单且易于理解的方式来查看和理解Linux系统中的进程层次结构。
pstree
,报错找不到命令,说明CentOS7默认没有安装pstreeyum -y install psmisc
参数 | 含义 |
---|---|
-A | 各进程树之间的连接以 ASCII 码字符来连接 |
-U | 各进程树之间的连接以 utf8 字符来连接,某些终端可能会有错误 |
-p | 同时列出每个进程的 PID |
-u | 同时列出每个进程的所属账号名称 |
pstree
pstree -Aup
参数 | 函数 |
---|---|
-l | 这个是L的小写,列出目前kill 能够使用的信号(signal)有哪些? signal 向进程发送的信号,指示其进行不同操作。用man 7 signal 可知。 |
-15 | 以正常的程序方式终止一个进程!!! |
-9 | 立刻强制终止一个进程!!! |
-2 | 代表由键盘输入[Ctrl + C] 同样的动作 |
-1 | 对于sshd这样的守护进程,重新读取一次参数的配置文件(类似reload),如果进程为非守护进程,默认为终止进程 |
执行命令:pstree -aup | grep sshd
用参数-1
来杀910进程,执行命令:kill -1 910
说明没有杀死sshd进程,又重新加载了
用参数-9
来杀死这个守护进程sshd,执行命令:kill -9 910
启动firewalld进程并查看其进程树
问题:父进程被kill掉,它的子进程是否就一起被kill掉?
结论:父进程被kill掉了,但是其子进程还依然存在。
如果任务是杀死所有用户的firewalld进程,那么就需要多次发布kill命令,很烦的,怎么办呢?Linux提供了一个很好的命令:killall。
利用killall命令杀死所有用户的firwalld进程
free
命令是Linux系统中的内存管理工具,用于显示系统的物理内存、交换空间和内核缓冲区的使用情况。通过指定选项,可以以字节、千字节、兆字节或吉字节为单位显示内存信息,并可以选择定时刷新输出结果。此外,free
还可以提供总内存、已用内存、空闲内存、缓冲/缓存内存以及可用内存等详细信息,帮助用户了解系统内存使用状况。选项 | 说明 |
---|---|
-b | 以字节为单位显示内存使用情况。 |
-k | 以千字节(KB)为单位显示内存使用情况。 |
-m | 以兆字节(MB)为单位显示内存使用情况。 |
-g | 以吉字节(GB)为单位显示内存使用情况。 |
-o | 不进行刷新操作。 |
-s delay | 每隔指定秒数刷新输出结果。 |
-t | 显示内存总和行。 |
-V | 显示版本信息。 |
free - mt
,观察内存(memory)使用情况uname
命令是Linux系统中用于查看系统信息的实用工具,可以显示操作系统的名称、版本号、主机名、处理器架构等关键信息。通过使用不同的选项参数,用户可以获取到特定的系统属性,例如内核名称、操作系统发行版和机器类型等。uname
命令对于系统管理员进行故障排查、软件安装或硬件兼容性检查等工作非常有用。选项 | 说明 |
---|---|
-a 或 --all | 显示所有系统信息 |
-s 或 --kernel-name | 输出内核名称 |
-n 或 --nodename | 输出网络节点主机名 |
-r 或 --kernel-release | 输出内核发行版本号 |
-v 或 --kernel-version | 输出内核版本信息 |
-m 或 --machine | 输出机器类型(硬件平台) |
-p 或 --processor输出处理器类型 | |
-i 或 --hardware-platform | 输出硬件平台 |
-o 或 --operating-system | 输出操作系统名称 |
uname -a
uptime
命令是Linux系统中用于查看系统运行时间和负载信息的工具。它会显示当前时间、系统已经运行的时间、在线用户数量以及系统负载情况(过去1分钟、5分钟和15分钟内的平均负载)。通过使用uptime
,用户可以了解系统的运行状况和性能表现,对于系统管理员进行监控和故障排查非常有用。uptime
netstat
命令是Linux系统中用于显示网络连接、路由表、接口统计等网络信息的工具。它可以帮助用户了解当前系统中的网络状态,包括活动的TCP和UDP连接、监听的端口以及网络接口的状态等。通过使用不同的选项参数,用户可以获取到特定的网络属性,例如查看所有活动连接(-a
)、显示监听的TCP和UDP端口(-l
)或查看路由表信息(-r
)。netstat
对于网络管理和故障排查非常有用。yum -y install net-tools
netstat -atp
netstat -antp
netstat -lntp
vmstat 1 4
,统计目前主机CPU状态,每秒一次,共计四次Ctrl+Z切换到后台,或者执行命令:tail -F anaconda-ks.cfg &
在当前bash执行多个任务
观察后台任务,用jobs命令(后台任务是一个任务栈,+
表明该任务处于栈顶,发布fg
命令,只有处于栈顶的后台任务才能切换成前台任务)
执行命令:jobs -r
# r: Running
执行命令:jobs -s
# s: Stopped
执行命令:jobs -l
,可以显示后台任务进程号
三种任务状态:Running, Stopped, Killed
执行命令:pstree -aup
,查看进程树的sshd部分
利用fg
命令可以将后台任务切换到前台,注意每次发布fg
命令,只能将处于任务栈顶的后台任务(编号后是“+
”的后台任务)切换到前台进行处理,然后栈顶的下一个任务就成为新的栈顶任务,其编号后的“-
”就会变成“+
”。
发布一次fg命令
进入末行模式,输入q,不存盘退出。
执行命令:jobs -l
现在,执行fg
命令之后,2768
这个处于栈顶的后台任务会变成前台任务来处理,但是我们暂时不把该任务切换到前台。我们试着杀死该后台任务。
停止作业:kill -15 2768
事实表明,删不掉vim作业,应该使用参数-9
再次执行命令:fg
小结:这个小结是对fg
命令功能的简要总结。fg
命令是Linux和Unix系统中的一个常用命令,用于将后台运行的任务切换到前台继续执行。在使用fg
命令时,如果没有指定作业编号,默认会将当前栈顶的作业(即最后一个被放入后台的任务)调至前台。通过反复使用fg
命令,用户可以按照自己的需要灵活地管理多个后台任务,方便地进行多任务处理。此外,结合其他相关的命令如bg
(将作业放到后台运行)和jobs
(查看后台作业列表),用户可以更好地控制和调度进程,提高工作效率。