在上一章节中,介绍了档案与目录之使用者权限控管与管理,在这一章节中,将要介绍作业系统上的程序管理(process)。
一个Process程序包含相关的要素如下:
在作业系统环境上的Process包含之要素如下:
整个作业系统启动并载入的时候会有一个main process,即主要的程序,叫做systemd,当其他的程序要启动的时候,systemd便会fork一个process出来运行指定的程序,当这个程序还没做完,再放到伫列中等待并休眠(sleeping),接着让下一个程序可以运行,并这样不断的循环下去,直到作业系统重新开启或关机为止,相关的示意图如下:
那Linux之程序状态有那些呢?相关的状态清单如下:
因为在作业系统中,监控每个Process是可以观察出资源使用,还有哪个Process有问题,吃很多的资源等,而可以使用top这个指令来即时的监控目前作业系统上每个正在运作的Process之状态,相关的指令执行後输出的讯息如下:
[rockylinux@workstation ~]$ top
top - 00:53:36 up 3:28, 1 user, load average: 0.00, 0.00, 0.00
Tasks: 176 total, 1 running, 175 sleeping, 0 stopped, 0 zombie
%Cpu(s): 2.6 us, 7.9 sy, 0.0 ni, 89.5 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 1817.1 total, 660.8 free, 535.7 used, 620.6 buff/cache
MiB Swap: 2108.0 total, 2108.0 free, 0.0 used. 1124.7 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
4177 rockyli+ 20 0 65428 4520 3880 R 5.6 0.2 0:00.03 top
1 root 20 0 186872 14524 9556 S 0.0 0.8 0:03.55 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp
4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_par_gp
6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H-events_highpri
8 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu_wq
9 root 20 0 0 0 0 S 0.0 0.0 0:00.03 ksoftirqd/0
10 root 20 0 0 0 0 I 0.0 0.0 0:00.27 rcu_sched
11 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
12 root rt 0 0 0 0 S 0.0 0.0 0:00.01 watchdog/0
13 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/0
14 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/1
15 root rt 0 0 0 0 S 0.0 0.0 0:00.01 watchdog/1
16 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/1
17 root 20 0 0 0 0 S 0.0 0.0 0:00.11 ksoftirqd/1
19 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/1:0H-events_highpri
21 root 20 0 0 0 0 I 0.0 0.0 0:00.13 kworker/u4:1-events_unbound
22 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs
23 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 netns
24 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kauditd
......
或者是可以使用ps aux
指令来看到此作业系统上之process程序的瞬间状态,相关的执行指令输出的讯息如下:
[rockylinux@workstation ~]$ ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.7 186872 14524 ? Ss Sep27 0:03 /usr/lib/systemd/systemd --switched-root
root 2 0.0 0.0 0 0 ? S Sep27 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? I< Sep27 0:00 [rcu_gp]
root 4 0.0 0.0 0 0 ? I< Sep27 0:00 [rcu_par_gp]
root 6 0.0 0.0 0 0 ? I< Sep27 0:00 [kworker/0:0H-events_highpri]
root 8 0.0 0.0 0 0 ? I< Sep27 0:00 [mm_percpu_wq]
root 9 0.0 0.0 0 0 ? S Sep27 0:00 [ksoftirqd/0]
root 10 0.0 0.0 0 0 ? I Sep27 0:00 [rcu_sched]
root 11 0.0 0.0 0 0 ? S Sep27 0:00 [migration/0]
root 12 0.0 0.0 0 0 ? S Sep27 0:00 [watchdog/0]
......
若ps
指令未带参数执行的话,则会将目前Shell所有底下正在执行的程序都印出,有时候,Prcoess名称会太长,导致终端机输出的讯息不完整,且被截断,为了要避免这件事情,可以加上w
参数让被截断的讯息可以自动换行并印出。
正在运行的工作就被称为:Process程序,而程序可以分成在前景与背景执行,在前景执行就是在终端机上面执行一个指令,等到这个指令运作完成与结束之後,才可以继续执行其他的指令,而背景就不一样了,当Process放到背景中去执行的时候,则终端机可以继续执行下一个指令,不需要等待。
相关的指令演示与输出的讯息如下:
[rockylinux@workstation ~]$ sleep 100
当执行上述的指令的时候,需要等待sleep指令完成,即等待100秒之後,终端机才会回复并执行下一个指令,若是改成在背景执行,则可以在指令的後面加上&
即可,相关的指令执行输出讯息如下:
[rockylinux@workstation ~]$ sleep 100 &
[1] 4459
[rockylinux@workstation ~]$ jobs
[1]+ Running sleep 100 &
[rockylinux@workstation ~]$
当在背景执行的时候,会输出一个Process id,利用jobs指令则可以看到目前在这个终端机上运行在背景的Process有哪一些,若要将背景的工作较回到前景也是可以的,利用fg指令便可以达到,假设要将上述放在背景中运行的sleep 100
叫回到前景,可以看到这个背景Process运行的编号是1,即[1]+
,则执行fg %1
即可,相关的指令执行输出的讯息如下:
[rockylinux@workstation ~]$ fg %1
sleep 100
当背景工作结束的时候,有时按下enter键,则会跳出下列的讯息,则表示编号为1的背景工作已经结束了,相关的指令执行输出的讯息如下:
[rockylinux@workstation ~]$
[1]+ Done sleep 100
若要将被叫回前景的Process再次回到背景,则可以使用bg
这个指令,操作的流程如下:
sleep 100 &
指令。fg %1
。jobs -l
观看目前在背景工作的清单与状态。bg %1
。jobs -l
观看目前在背景工作的清单与状态。[rockylinux@workstation ~]$ jobs -l
[rockylinux@workstation ~]$ sleep 100
^Z
[1]+ Stopped sleep 100
[rockylinux@workstation ~]$ jobs -l
[1]+ 5805 Stopped sleep 100
[rockylinux@workstation ~]$
[rockylinux@workstation ~]$ bg %1
[1]+ sleep 100 &
[rockylinux@workstation ~]$ jobs -l
[1]+ 5805 Running sleep 100 &
[rockylinux@workstation ~]$
sleep 90
在前景,接着试着让其中断。
<<: IT 铁人赛 k8s 入门30天 -- day13 Deploying Stateful Apps with StatefulSet
>>: Day12 主动情蒐-确认目标 metasploitable 3 的 IP
以图卡的方式统整一下 Windows 提权手法: Kernel Exploits vs Servic...
OS模组(Python内建) 说明 : os模组是一种与作业系统相关的模组,提供数十种与作业系统沟通...
首先打开终端机输入此行 接下来系统会要求输入你电脑的密码 输入完之後按enter,之後就会自己跑,跑...
昨天提到了有关监控的议题,监控服务的其中一个目的是为了在系统发生错误的时候可以即时的通知相关人员,...
到目前为止,介绍了许多操作 Docker 的方法,现在来了解更详细的操作方法。 说穿了,其实还是下指...