指令+参数通过逻辑控制运行起来完成某项特定任务
程序运行起来的结果
操作系统运行的基本单位
有生命周期(产生---->死亡)
进程有运行状态(running,sleeping,waiting,僵死)
并发性,交互性(管道)----共享内存,队列(kafka)
程序和进程不是一一对应的,相同的程序运行在不同的数据集上就是不同的进程
子进程会继承父进程的特性:安全性的身份认证;过去和当前的文件描述符,端口等资源特权;环境变量;程序代码。
父进程------>fork()------>子进程
子进程------>exec()------>运行程序
子进程------>exit()------>退出
对于linux而言,不严格区分,对于进程何处线程都将拥有独立的一套完整资源集(内存---->虚拟内存,CPU---->时间片)
-p 同时列出每个进程的PID
-A 各进程树之间的连接以ASCII码字符来连接
-U 各进程树之间的连接以utf8字符来连接,某些终端可能会有错误
-u 同时列出每个进程的所属账号名称
ps aux
ps命令详情请点击查看
1.pgrep通过匹配其程序名,找到匹配的进程
2.进程号越大,并不一定意味着进程的启动时间越晚
pgreep 查看进程号
pgrep -o 进程号最小(父进程)
pgrep -n 进程号最大(子进程)
pgrep -l 所有进程及名称
[root@zycentos7 ~]# pgrep sshd
6836
7120
7128
[root@zycentos7 ~]# pgrep -o sshd
6836
[root@zycentos7 ~]# pgrep -n sshd
7128
[root@zycentos7 ~]# pgrep -l sshd
6836 sshd
7120 sshd
7128 sshd
killall -i 交互模式
killall -l 列出所有的已知信号名称
编号 | 信号名 |
---|---|
1) SIGHUP | 重新加载配置 |
2) SIGINT | 键盘中断Ctrl+c |
3) SIGQUIT | 键盘退出 |
9) SIGKILL | 强制终止,可能会出问题 |
15) SIGTERM | 终止(正常结束),缺省信号 |
18) SIGCONT | 继续 |
19) SIGSTOP | 停止 |
20)SIGTSTP | 暂停^Z |
示例1 SIGHUP信号发出之后,主进程的进程号不发生变化,子进程的进程号会发送变化
[root@zycentos7 ~]# ps -ef|grep nginx
root 31943 1 0 20:29 ? 00:00:00 nginx: master process nginx
nginx 31944 31943 0 20:29 ? 00:00:00 nginx: worker process
root 31948 28945 0 20:29 pts/2 00:00:00 grep --color=auto nginx
[root@zycentos7 ~]# kill -1 31943
[root@zycentos7 ~]# ps -ef|grep nginx
root 31943 1 0 20:29 ? 00:00:00 nginx: master process nginx
nginx 31982 31943 0 20:30 ? 00:00:00 nginx: worker process
root 31989 28945 0 20:30 pts/2 00:00:00 grep --color=auto nginx
示例2 键盘中断
[root@zycentos7 ~]# tty
/dev/pts/1
[root@zycentos7 ~]# ping 192.168.232.125
PING 192.168.232.125 (192.168.232.125) 56(84) bytes of data.
64 bytes from 192.168.232.125: icmp_seq=1 ttl=64 time=0.052 ms
……
64 bytes from 192.168.232.125: icmp_seq=29 ttl=64 time=0.079 ms
--- 192.168.232.125 ping statistics ---
29 packets transmitted, 29 received, 0% packet loss, time 28006ms
rtt min/avg/max/mdev = 0.052/0.168/2.452/0.432 ms
[root@zycentos7 ~]# tty
/dev/pts/2
[root@zycentos7 ~]# ps -ef|grep ping
root 29022 28172 0 19:33 pts/1 00:00:00 ping 192.168.232.125
root 29029 28945 0 19:33 pts/2 00:00:00 grep --color=auto ping
[root@zycentos7 ~]# kill -2 29022
示例3 kill -9和kill -15信号的区别
[root@zycentos7 ~]# tty
/dev/pts/0
[root@zycentos7 ~]# ps -ef|grep vim
root 31480 28172 0 20:20 pts/1 00:00:00 vim test01
root 31489 28945 0 20:20 pts/2 00:00:00 vim test02
root 31503 31413 0 20:20 pts/0 00:00:00 grep --color=auto vim
[root@zycentos7 ~]# kill -9 31480
[root@zycentos7 ~]# kill -15 31489
[root@zycentos7 ~]# ps -ef|grep vim
root 31537 31413 0 20:21 pts/0 00:00:00 grep --color=auto vim
[root@zycentos7 ~]# tty
/dev/pts/1
[root@zycentos7 ~]# vim test01
Killed
[root@zycentos7 ~]# vim test01
E325: ATTENTION
Found a swap file by the name ".test01.swp"
owned by: root dated: Sat Nov 16 20:20:05 2019
file name: ~root/test01
modified: no
user name: root host name: zycentos7
process ID: 31480
While opening file "test01"
dated: Sat Nov 16 19:42:46 2019
[root@zycentos7 ~]# ls -al .test01.swp ;删除该文件后可正常打开
-rw-r--r--. 1 root root 12288 Nov 16 20:20 .test01.swp
[root@zycentos7 ~]# tty
/dev/pts/2
[root@zycentos7 ~]# vim test02
Vim: Caught deadly signal TERM
Vim: Finished.
Terminated
[root@zycentos7 ~]# vim test02 ;可正常打开
killall -q 不输出警告信息
[root@zycentos7 ~]# killall nginx
nginx: no process found
[root@zycentos7 ~]# killall -q nginx
[root@zycentos7 ~]# echo $?
1
killall -s 发送指定的信号
killall -s HUP named
killall -HUP named
killall -v 报告信号是否成功发送
killall -9 named && killall named 杀死所有同名进程
如果需要杀死的进程需要查找,则需使用ps等命令再配合grep来查找进程在杀死,killall可以把这两个过程合二为一
1.通常,终止一个前台进程可以使用Ctrl+C键。
2.终止一个后台进程用kill命令:需要先使用ps/pidof/pstree/top等工具获取进程PID,然后使用kill命令来杀掉该进程。
3.kill命令是通过向进程发送指定的信号来结束相应进程的。在默认情况下,采用编号为15的TERM信号,TERM信号将终止所有不能捕获该信号的进程。对于那些可以捕获该信号的进程就要用编号为9的kill信号,强行“杀掉”该进程。
kill [选项] [进程id]
-l 信号 若果不加信号的编号参数,则使用-l参数会列出全部的信号名称
-a 当处理当前进程时,不限制命令名和进程号的对应关系
-p 指定kill 命令只打印相关进程的进程号,而不发送任何信号
-s 指定发送信号
-u 指定用户
重点
实例1 列出所有信号名称
[root@zycentos7 ~]# kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
……
63) SIGRTMAX-1 64) SIGRTMAX
实例2 得到指定信号的数值
[root@zycentos7 ~]# kill -l KILL
9
实例3 先用ps查找进程,然后用kill杀掉
[root@zycentos7 ~]# ps -ef|grep vim
root 7981 7964 0 09:27 pts/1 00:00:00 vim 1
root 7983 7740 0 09:28 pts/0 00:00:00 grep --color=auto vim
[root@zycentos7 ~]# kill 7981
[root@zycentos7 ~]# echo $?
0
实例4 彻底杀死进程
[root@zycentos7 ~]# ps -ef|grep vim
root 7987 7964 0 09:30 pts/1 00:00:00 vim 1
root 7989 7740 0 09:30 pts/0 00:00:00 grep --color=auto vim
[root@zycentos7 ~]# kill -9 7987
pkill是ps命令和kill命令的结合,按照进程名来杀死指定进程,可以发送信号
pkill -l pts/0
按终端杀死进程
pkill -9 -l pts/0
发送信号9,终端一并被杀死
pkill -u user
按用户杀死进程
pkill -19 -u user
top命令详情请点击查看
[root@zycentos7 ~]# yum install htop -y
【监控软件top的增强版Htop,相比top其有着很多自身的优势】
1.两者相比起来,top比较繁琐
2.默认支持图形界面的鼠标操作
3.可以横向或纵向滚动浏览进程列表,以便看到所有的进程和完整的命令行
4.杀进程时不需要输入进程号等
上左区域 显示了CPU、物理内存和交换分区的信息
上右区域 显示了任务数量、平均负载和连接运行时间等信息
进程区域 显示出当前系统中的所有进程 与top显示一致
PID:进行的标识号
USER:运行此进程的用户
PRI:进程的优先级
NI:进程的优先级别值,默认的为0,可以进行调整
VIRT:进程占用的虚拟内存值
RES:进程占用的物理内存值
SHR:进程占用的共享内存值
S:进程的运行状况,R表示正在运行、S表示休眠,等待唤醒、Z表示僵死状态
%CPU:该进程占用的CPU使用率
%MEM:该进程占用的物理内存和总内存的百分比
TIME+:该进程启动后占用的总的CPU时间
COMMAND:进程启动的启动命令名称
前台一次只能运行一个进程,后台一次可以运行多个进程
把一个前台程序放到后台执行 &
[root@zycentos7 ~]# ping www.baidu.com >/dev/null 2>&1 &
[1] 32627
[root@zycentos7 ~]# ps -ef|grep ping
root 32627 28945 0 20:42 pts/2 00:00:00 ping www.baidu.com
root 32636 28945 0 20:42 pts/2 00:00:00 grep --color=auto ping
[root@zycentos7 ~]# ping www.baidu.com >/dev/null 2>&1 &
[2] 32652
[root@zycentos7 ~]# ps -ef|grep ping
root 32627 28945 0 20:42 pts/2 00:00:00 ping www.baidu.com
root 32652 28945 0 20:43 pts/2 00:00:00 ping www.baidu.com
root 32656 28945 0 20:43 pts/2 00:00:00 grep --color=auto ping
sleep
running
stop
zombie
进程状态间的切换
运行 | 就绪 | 等待 |
---|---|---|
在CPU上运算 | 资源已分配,等待CPU空闲 | 事件未触发 |
运行----时间片耗尽
---->就绪
等待----事件触发
---->就绪
就绪----进程调用或者系统调用
---->运行
运行----等待事件发生
---->等待
nice值(NI) 相对优先级(优先级度量)-20~+19,nice值越低优先级越高【在原来使用O1调度的Linux上把nice叫静态优先级】
priorty值(PR) 将nice值级别显示为映射到更大优先级队列,-20映射到100,+19映射到139【在原来使用O1调度的Linux上把priorty叫动态优先级】
0-99 (100)系统进程优先级(这个范围值的进程是实时进程,隐含了一个信息:当前Linux系统是一个已经支持实时进程的操作系统)
100-139 (40)用户进程优先级(非实时进程)
使用ps查看nice级别,使用top查看PR级别
[root@zycentos7 ~]# ps axo pid,command,nice --sort=-nice
PID COMMAND NI
32 [khugepaged] 19
31 [ksmd] 5
NI - 常驻进程,无优先级
指定nice值
[root@zycentos7 ~]# nice -n -5 sleep 600 &
[4] 36673
[root@zycentos7 ~]# ps axo command,pid,nice|grep sleep
sleep 600 36673 -5
grep --color=auto sleep 36706 0
用renice改变nice值
[root@zycentos7 ~]# renice -20 PID
shell可以同时运行一个前台作业和任意多个后台作业,称为作业控制
操作 | 含义 |
---|---|
jobs | 查看作业的jnum |
Ctrl+z | 将前台的程序挂起(暂停)到后台 |
fg %jnum | 恢复到前台继续运行 |
bg %jnum | 将一个在后台暂停的命令,变成继续执行 (在后台执行) |
kill -9 %# | 默认发送15信号 |
1.jobs命令显示的是当前shell环境中所起的后台正在运行或者被挂起的任务信息。
将任务转移到后台运行:
2.先ctrl + z,再bg,这样进程就被移到后台运行,终端还能继续接受命令。
3.直接输入“fg”、“bg”和“stop”等命令时,则所变动的均是当前任务进程的终止
当前任务:如果后台的任务号有2个,[1][2],第一个后台任务顺利执行完毕,第二个后台任务还在执行中时,当前任务便会自动变成后台任务号码“[2]”的后台任务。即当前任务是会变动的。
4.后台进程的终止
方法一:通过jobs命令查看job号(假设为num),然后执行kill %num
方法二:通过ps命令查看job的进程号(PID,假设为pid),然后执行kill pid
[root@zycentos7 ~]# sleep 600 &
[1] 7838
[root@zycentos7 ~]# sleep 600
^Z
[2]+ Stopped sleep 600
[root@zycentos7 ~]# jobs
[1]- Running sleep 600 &
[2]+ Stopped sleep 600
[root@zycentos7 ~]# ps aux|grep sleep
root 7838 0.0 0.0 107956 356 pts/0 S 10:08 0:00 sleep 600
root 7841 0.0 0.0 107956 356 pts/0 T 10:09 0:00 sleep 600
root 7844 0.0 0.0 112712 964 pts/0 R+ 10:10 0:00 grep --color=auto slee
[root@zycentos7 ~]# fg 2
sleep 600
^Z
[2]+ Stopped sleep 600
[root@zycentos7 ~]# jobs
[1]- Running sleep 600 &
[2]+ Stopped sleep 600
[root@zycentos7 ~]# bg 2
[2]+ sleep 600 &
[root@zycentos7 ~]# jobs
[1]- Running sleep 600 &
[2]+ Running sleep 600 &
[root@zycentos7 ~]# kill %1
[root@zycentos7 ~]# jobs
[1]- Terminated sleep 600
[2]+ Running sleep 600 &
[root@zycentos7 ~]# jobs
[2]+ Running sleep 600 &
[root@zycentos7 ~]# kill -9 %2
[root@zycentos7 ~]#
[2]+ Killed sleep 600
/proc 正在运行的内核信息映射
/sys 硬件设备的驱动程序信息
Linux 内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构、改变内核设置的机制。proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。
文件 | 含义 |
---|---|
/proc/cpuinfo | cpu信息(lscpu) |
/proc/meminfo | 内存使用信息(free -m) |
/proc/uptime | cpu负载(uptime) |
/proc/cmdline | 内核启动参数信息 |
/proc/devices | 已经加载的设备并分类 |
/proc/filesystems | 内核当前支持的文件系统类型 |
/proc/loadavg | 负载状态,与uptime命令有关 |
/proc/modules | 所有加载到内核的模块列表 |
/proc/mounts | 系统中使用的所有挂载 |
/proc/stat | 所有的CPU活动信息 |
Sysfs是一个类似于proc文件系统的特殊文件系统,用于将系统中的设备组织成层次结构,并向用户模式程序提供详细的内核数据结构信息。即在用户态可以通过对sys文件系统的访问,来看内核态的一些驱动或者设备等。
文件或目录 | 含义 |
---|---|
/sys/fs | 描述系统中所有的文件系统,包括文件系统本身和按照文件系统分类存放的已挂载点 |
/sys/kernel | 内核中所有可调整的参数 |