Linux|操作系统

操作系统的组成

操作系统是一个软件,内部由很多模块组成

操作系统的组成

1.内核

2.系统调用 system call

3.应用程序 (例如:mkdir, vim, ls命令就相当于应用程序)

4.共享库

5.shell解析器

img

内核的作用

内核是操作系统内部最核心的软件,主要是使用c语言编写的,是开源并且免费的软件

1.对CPU进行管理

2.对内存进行管理

3.对磁盘进行管理 ——》 文件系统

4.对进程进行管理

5.对网络进行管理

查看linux内核版本

[root@lier ~]# cat /etc/centos-release
CentOS Linux release 7.9.2009 (Core)
[root@lier ~]# uname -r
3.10.0-1160.62.1.el7.x86_64
[root@lier ~]# 

Linux和Windows的区别

  1. Linux 系统内核是开源的;Windows系统是付费的

  2. Linux 系统更专业;Windows 具有交互性,入门容易

  3. Linux 的用户比 Windows 用户少,Windows适合小白用户,所以用户多一点

  4. Linux中有开源并且免费的系统,如 centos / Ubuntu ;Windows都要付费,但是有些需要付费的 Linux 系统费用比 Windows 高很多

  5. Linux 系统跟 Windows 系统安全性相当,但是由于 Linux 系统大多是专业人士使用,所以很少有人会攻击

进程

进程的组成

进程是由PCB(进程控制块)、程序段和代码段组成

操作系统通过PCB来管理进程,因此PCB中存放操作系统对程序进行管理所需的各种信息,如进程描述信息、进程控制和管理信息、资源分配清单、处理机相关信息;

程序段存放程序代码;

数据段存放程序运行时使用、产生的运算数据,如全局变量、局部变量、宏定义的常量;

PCB: 存放进程的管理和控制信息的数据结构称为进程控制块(PCB Process Control Block).
内核通过对PCB的掌控来感知进程是否存在。
PCB一般包括:
1.程序ID(PID、进程句柄):它是唯一的,一个进程都必须对应一个PID。PID一般是整形数字
2.特征信息:一般分系统进程、用户进程、或者内核进程等
3.进程状态:运行、就绪、阻塞,表示进程现有的运行情况
4.优先级:表示获得CPU控制权的优先级大小
5.通信信息:进程之间的通信关系的反映,由于操作系统会提供通信信道
6.现场保护区:保护阻塞的进程用 --》上下文切换
7.资源需求、分配控制信息
8.进程实体信息,指明程序路径和名称,进程数据在物理内存还是在交换分区(分页)中
9.其他信息:工作单位,工作区,文件信息等

用户、pid、状态、优先级、内存空间的地址

身份证:
系统调用: 名词,动词
是内核给应用程序的接口,它也是一个程序,然后会帮助应用程序调用内核里的相关代码,去执行,完成相关的操作
用户是捆绑到进程里,然后进程去做事情,携带了用户的标识。
用户–》执行命令–》启动进程–》做各种操作–》权限的检查

程序: 实现某个功能的代码,不运行的情况下,放在磁盘里
进程: 正在运行的程序,在内存和cpu里

ps

查看Linux中的进程,ps命令查看的是Linux系统中一瞬间的所有进程

ps 是命令
ps - report a snapshot of the current processes. 将当前所有的进程快照报告给我看看

ps aux

a 显示所有用户的进程(show processes for all users) u 显示用户(display the process’s user/owner) x 显示无控制终端的进程(also show processes not attached to a terminal)

[root@lier ~]# ps aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.3  46080  6628 ?        Ss   07:09   0:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root          2  0.0  0.0      0     0 ?        S    07:09   0:00 [kthreadd]
root          4  0.0  0.0      0     0 ?        S<   07:09   0:00 [kworker/0:0H]
root          5  0.0  0.0      0     0 ?        S    07:09   0:01 [kworker/u256:0]

1、USER 哪个用户启动了这个命令

2、PID 进程ID

3、 CPU占用率

4、MEM 内存使用量

5、VSZ 如果一个程序完全驻留在内存的话需要占用多少内存空间

6、RSS 当前实际占用了多少内存

7、TTY: 终端的次要装置号码 (minor device number of tty)

8、STAT 进程当前的状态(“S”:中断 sleeping,进程处在睡眠状态,表明这些进程在等待某些事件发生–可能是用户输入或者系统资源的可用性;“D”:不可中断 uninterruptible sleep;“R”:运行 runnable;“T”:停止 traced or stopped;“Z”:僵死 a defunct zombie process)

9、START 启动命令的时间点

10、TIME 进程执行起到现在总的CPU暂用时间

11、COMMAND 启动这个进程的命令

ps -ef

e 显示所有用户的进程(all processes)此参数的效果和指定"a"参数相同 f 用ASCII字符显示树状结构,表达程序间的相互关系(ASCII art forest)

[root@lier ~]# ps -ef
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 09:16 ?        00:00:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root          2      0  0 09:16 ?        00:00:00 [kthreadd]
root          4      2  0 09:16 ?        00:00:00 [kworker/0:0H]
root          5      2  0 09:16 ?        00:00:01 [kworker/u256:0]

1、UID 用户号

2、PID 进程ID

3、PPID 父进程号

4、C CPU占用率

5、TTY 终端的次要装置号码 (minor device number of tty)

6、TIME 进程执行起到现在总的CPU暂用时间

7、COMMAND 启动这个进程的命令

top

动态的显示当前系统里的进程的使用情况(cpu,内存,进程信息),类似于Windows系统中的任务管理器

[root@lier ~]# top
top - 17:10:27 up  7:53,  3 users,  load average: 0.00, 0.01, 0.05
Tasks: 113 total,   1 running, 112 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.2 sy,  0.0 ni, 99.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  1862996 total,  1152184 free,   283440 used,   427372 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.  1408316 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                
 10175 root      20   0  162084   2224   1556 R   0.7  0.1   0:00.03 top                                                                                    
     9 root      20   0       0      0      0 S   0.3  0.0   0:08.35 rcu_sched                                                                              
    50 root      20   0       0      0      0 S   0.3  0.0   0:41.19 kworker/0:1                                                                            
  1771 mysql     20   0  971000  88324   7148 S   0.3  4.7   1:10.44 mysqld                                                                                 
  1869 root      20   0   89788   2200   1164 S   0.3  0.1   0:00.68 master             

PID — 进程id

USER — 进程所有者

PR — 进程优先级

NI — nice值。负值表示高优先级,正值表示低优先级

VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES

RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA

SHR — 共享内存大小,单位kb

S — 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程

%CPU — 上次更新到现在的CPU时间占用百分比

%MEM — 进程使用的物理内存百分比

TIME+ — 进程使用的CPU时间总计,单位1/100秒

COMMAND — 进程名称(命令名/命令行)

htop 有颜色的动态显示 top 命令的内容

如何杀死进程

kill

NAME
kill - terminate a process

kill -l

查看系统中的信号

[root@lier ~]# kill -l
 1) SIGHUP	 2) SIGINT	 3) SIGQUIT	 4) SIGILL	 5) SIGTRAP
 6) SIGABRT	 7) SIGBUS	 8) SIGFPE	 9) SIGKILL	10) SIGUSR1
11) SIGSEGV	12) SIGUSR2	13) SIGPIPE	14) SIGALRM	15) SIGTERM
16) SIGSTKFLT	17) SIGCHLD	18) SIGCONT	19) SIGSTOP	20) SIGTSTP
21) SIGTTIN	22) SIGTTOU	23) SIGURG	24) SIGXCPU	25) SIGXFSZ
26) SIGVTALRM	27) SIGPROF	28) SIGWINCH	29) SIGIO	30) SIGPWR
31) SIGSYS	34) SIGRTMIN	35) SIGRTMIN+1	36) SIGRTMIN+2	37) SIGRTMIN+3
38) SIGRTMIN+4	39) SIGRTMIN+5	40) SIGRTMIN+6	41) SIGRTMIN+7	42) SIGRTMIN+8
43) SIGRTMIN+9	44) SIGRTMIN+10	45) SIGRTMIN+11	46) SIGRTMIN+12	47) SIGRTMIN+13
48) SIGRTMIN+14	49) SIGRTMIN+15	50) SIGRTMAX-14	51) SIGRTMAX-13	52) SIGRTMAX-12
53) SIGRTMAX-11	54) SIGRTMAX-10	55) SIGRTMAX-9	56) SIGRTMAX-8	57) SIGRTMAX-7
58) SIGRTMAX-6	59) SIGRTMAX-5	60) SIGRTMAX-4	61) SIGRTMAX-3	62) SIGRTMAX-2
63) SIGRTMAX-1	64) SIGRTMAX	

常见的信号

  1. SIGHUP signal hup 挂起信号,告诉一组进程的leader(session的第一个进程),如果leader挂了,会给下面的进程发HUP信号,收到HUP信号的进程都会被kill掉

  2. SIGIN signal interrupt 中断信号,终止正在运行的进程

  3. SIGKILL signal kill 强制杀死进程的信号

  4. SIGTERM signal terminate 自我终结信号 --》信号可以被屏蔽的 --》默认的信号

[root@lier ~]# su - lyl
上一次登录:三 61 08:44:41 CST 2022pts/0 上
[lyl@lier ~]$ vim sc.txt

再另起一个终端查看进程

[root@lier ~]# ps aux|grep sc.txt
lyl       10769  0.1  0.2 149576  5256 pts/0    S+   09:20   0:00 vim sc.txt
root      10771  0.0  0.0 112824  1000 pts/1    S+   09:20   0:00 grep --color=auto sc.txt

使用kill -9 强制杀死10769这个进程

[root@lier ~]# kill -9 10769
已杀死
[lyl@lier ~]$      

默认kill直接接进程使用的是15信号,让进程自我终结

[lyl@lier ~]$ vim sc.txt    
[root@lier ~]# ps aux|grep sc.txt
lyl       10780  0.2  0.2 149576  5256 pts/0    S+   09:37   0:00 vim sc.txt
root      10784  0.0  0.0 112824  1000 pts/1    S+   09:37   0:00 grep --color=auto sc.txt
[root@lier ~]# kill 10780
[lyl@lier ~]$ vim sc.txt
Vim: Caught deadly signal TERM

Vim: Finished.
已终止

实验

在 lyl 用户中创建一个脚本

[lyl@lier ~]$ cat while.sh 
#!/bin/bash

trap "echo i am busy" 15 2 1 9	# 当捕捉到15、2、1信号时输出i am busy
i=1
# while :
while true
do
	echo $i
	((i++))
	sleep 1
done
[lyl@lier ~]$ bash while.sh 

另起一个终端

[root@lier ~]# ps aux|grep while.sh
lyl       10885  0.0  0.0 113284  1436 pts/0    S+   09:43   0:00 bash while.sh
root      10891  0.0  0.0 112824  1004 pts/1    S+   09:43   0:00 grep --color=auto while.sh
[root@lier ~]# kill -1 10885
# 
57
58
59
60
i am busy
61
62
63
64
[root@lier ~]# kill -2 10885
#
118
119
120
121
122
123
i am busy
124
125
126
127
[root@lier ~]# kill -15 10885
#
170
171
172
i am busy
173
174
175
176
177
[root@lier ~]# kill -9 10885
# 
198
199
200
已杀死

trap

捕捉信号的命令

[lyl@lier ~]$ cat while.sh 
#!/bin/bash

trap "echo i am busy" 15 2 1 9
i=1
# while :
while true
do
	echo $i
	((i++))
	sleep 1
done

当捕捉到 15、2、1信号时输出 i am busy

但是设置捕捉9这个信号的时候没有用,因为9信号会强制杀死进程

nohup

NAME
nohup - run a command immune to hangups, with output to a non-tty

nohup 运行的程序可以屏蔽hup信号

[lyl@lier ~]$ cat while.sh 
#!/bin/bash

trap "echo i am busy" 15 2 1 9
i=1
# while :
while true
do
	echo $i
	((i++))
	sleep 1
done
[lyl@lier ~]$ cat nohup.out 
[lyl@lier ~]$ nohup bash while.sh 
nohup: 忽略输入并把输出追加到"nohup.out"
已杀死

先尝试使用1信号杀死进程,再用9信号强制杀死进程

[root@lier ~]# ps aux|grep while.sh
lyl       11327  0.0  0.0 113284  1440 pts/0    S+   10:01   0:00 bash while.sh
root      11335  0.0  0.0 112824  1000 pts/1    S+   10:01   0:00 grep --color=auto while.sh
[root@lier ~]# kill -1 11327
[root@lier ~]# kill -9 11327

查看nohup.out文件中的内容

[lyl@lier ~]$ cat nohup.out 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

文件中没有i am busy ,说明没有捕获到1信号,使用nohup执行脚本时1信号被屏蔽了

刚刚是在两个终端中进行操作,现在在一个终端中操作

[lyl@lier ~]$ nohup bash while.sh &
[1] 11357
[lyl@lier ~]$ nohup: 忽略输入并把输出追加到"nohup.out"

[lyl@lier ~]$ ps aux|grep while.sh
lyl       11357  0.0  0.0 113284  1436 pts/0    S    10:07   0:00 bash while.sh
lyl       11374  0.0  0.0 112824  1004 pts/0    S+   10:07   0:00 grep --color=auto while.sh
[lyl@lier ~]$ 

& 将这条命令在后台执行,不需要占前端的终端,进程仍然存在

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值