进程详细介绍

进程基本概述

1.什么是进程

  ***我们将运行的程序叫进程***
  ls pwd cd 静态的文件 一段代码存储在磁盘中
  命令运行中 称为进程
  PS1:当程序运行为进程后,系统会为该进程分配内存,以及进程运行的身份和权限
  PS2:在进程运行的过程中,服务器上会有各种状态来表示当前进程的指标信息

2.程序与进程的区别

  程序是数据和指令的集合,是一个静态的概念,比如/bin/ls /bin/cp 等二进制文件,同时程序可以长期存在系统中
  进程是程序运行的过程,是一个动态的概念,进程是存在生命周期概念的,也就是说进程随着程序的终止而销毁,不会永久存在系统中

3.进程的生命周期

一个对象从无到有、从有到无过程称为生命周期
(就绪态 执行态 僵死态 停止态 睡眠态)
在这里插入图片描述
当父进程接收到任务调度时,会通过fock派生子进程来处理,子进程会继承父进程衣钵(相当于完全复制了一份父进程的信息)
1.子进程在处理任务代码时,父进程会进入等待状态中
2.子进程在处理任务代码后,会执行退出,然后唤醒父进程来回收子进程的资源
3.如果子进程在处理任务过程中,父进程退出,子进程没有退出,子进程没有被父进程管理,则变为僵尸进程
4.每个进程都有自己的PID号,子进程称为PPID

监控进程状态

程序在运行后,我们需要了解进程的运行状态,
查看进程的状态分为:静态和动态两种方式

1.使用ps命令查看当前的进程状态(静态)

ps –auxf常用组合方式查看进程、PID、占用cpu百分比,占用内存百分比,状态、执行的命令等
-a显示所有终端机下执行的进程,除了阶段作业领导者之外
-u以用户为主的格式来显示进程状况
-x显示所有进程,不以终端机来区分
-f用ASCII字符显示树状结构,表达进程间的相互关系
在这里插入图片描述

----标志-------意义
USER该 process 属于那个使用者账号的
PID该 process 的号码
%CPU该 process 使用掉的 CPU 资源百分比
%MEM该 process 所占用的物理内存百分比
VSZ该 process 使用掉的虚拟内存量 (Kbytes)
RSS该 process 占用的固定的内存量 (Kbytes)
TTY该 process 是在哪个终端机上面运作,若与终端机无关,则显示 ?,另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。
STAT该程序目前的状态
START被触发启动的时间
TIME该 process 实际使用 CPU 运作的时间
COMMAND该程序的实际指令[]内核态进程 无[] 用户进程

在这里插入图片描述

2.案例

1)在终端1上运行vim

1.在终端1上运行vim 
2.在终端2上运行ps命令查看状态
[root@alex ~]#vim test
[root@alex ~]#ps -aux |grep vim|grep -v grep
root      10807  0.3  0.5 149396  5256 pts/0    S+   16:01   0:00 vim test
3)在终端1上挂起vim命令按下: ctrl+z
4) 回到终端2再次运行ps命令查看状态
[root@alex ~]#ps -aux |grep test|grep -v grep
root      10807  0.0  0.5 149396  5256 pts/0    T    16:01   0:00 vim test

2).PS命令查看不可中断状态进程

使用tar打包文件时,可以通过中断不断查看状态,由S+,R+变为D+

[root@lzy ~]# ps axu|grep tar|grep -v grep
root     14289  2.6  0.1 124268  1888 pts/2    S+   10:56   0:01 tar zcf etc.tar.gz /etc/ /usr/ /var
[root@lzy ~]# ps axu|grep tar|grep -v grep
root     14289  2.7  0.2 124380  2240 pts/2    R+   10:56   0:01 tar zcf etc.tar.gz /etc/ /usr/ /var
[root@lzy ~]# ps axu|grep tar|grep -v grep
root     14289  2.9  0.2 124916  2724 pts/2    D+   10:56   0:01 tar zcf etc.tar.gz /etc/ /usr/ /var

3.使用top动态查看进程状态

在这里插入图片描述

任务含义
Tasks:73 totalT当前进程的总数
2 running正在运行的进程数
71 sleeping睡眠的进程数
0 stopped停止的进程数
0 zombie僵尸进程数
%Cpu(s): 49.2 us系统用户进程使用CPU百分比
5.7 sy内核进程占用CPU百分比,内核是于硬件进行交互
ni优先调度进程占用CPU的时间
45.2 id空闲CPU的百分比
0.0 waCPU等待IO完成的时间
0.0 hi硬中断,占的CPU百分比
0.0 si软中断,占的CPU百分比
0.0 st比如虚拟机占用物理CPU的时间 Linux虚拟化 KVM

1).什么是中断?

中断就是终止当前在做的事情 去执行另一段程序
会保留现场,执行的那段程序做完之后会在回来执行刚来尚未完成的部分
在这里插入图片描述

软中断与硬中断

//简单理解软中断与硬中断 
执行下载视频任务
--CPU开始执行这个任务
--中间突然来了第二个任务
--此时硬中断去处理第二个任务
--第二个任务完成后回到第一个任务的场景
--此时由软中断接手第一个未完成的任务
-------
小文件过多会影响CPU性能
原因就是任务过多,不断的硬中断和软中断

下面展示一些 top的参数选项

top
h	# 查看帮助
1	# 数字1,显示所有CPU核心的负载
z	# 以高亮显示数据
b	# 高亮显示处于R状态的进程
M	# 按内存使用百分比排序输出
P	# 按照CPU使用百分比排序输出
q	# 退出top

管理进程状态

当程序运行为进程后,如果希望停止进程,怎么办呢?那么此时我们可以使用linux的kill命令对进程发送关闭新号,当然除了kill 还有killall pkill

1)使用kill –l列出当前系统所支持的信号

在这里插入图片描述
虽然Linux信号很多,但是我们仅仅使用最常用的3个信号

1)SIGHUP 重新加载配置文件			1  类似于reload
2)SIGKILL 强制杀死进程     				9
3)SIGTERM 终止进程,默认kill使用该信号 15
[root@alex ~]# ps axu|grep nginx    
root     15688  0.0  0.1  87384  1132 ?        Ss   12:19   0:00 nginx: master process /usr/sbin/nginx
nginx    15689  0.0  0.3  89096  3176 ?        S    12:19   0:00 nginx: worker process
root     15691  0.0  0.0 112660   968 pts/3    R+   12:19   0:00 grep --color=auto nginx
# 发送重新加载信号 nginx配置文件发生改变,可用此重新加载
[root@alex ~]# kill -1 15688
[root@lzy ~]# ps axu|grep nginx
nginx    15692  0.0  0.3  89376  3648 ?        S    12:19   0:00 nginx: worker process
root     15722  0.0  0.0 112660   968 pts/3    R+   12:20   0:00 grep --color=auto nginx
#发送停止信号 kill pid
[root@alex ~]# kill 15692
#强制终止服务
kill -9 15692

2.Linux系统中killall,pkill命令用于杀死指定名字的进程,我们可以使用kill命令杀死指定进程的PID的进程,killall和pkill直接杀进程而不需要查pid

[root@alex ~]# killall nginx
[root@alex ~]# pkill nginx
#使用pkill踢出从远程登录到本机的用户,终止pts1上所有进程,用户强制退出
[root@alex ~]# pkill -9 -t pts/1
#pkill和killall不好用 杀不掉进程 使用进程号的方式才能杀
#如何批量杀死httpd所有的进程号
[root@alex ~]# ps axu|grep -v grep|grep httpd|awk '{print $2}'|xargs kill -9

管理后台进程

1)什么是后台进程
进程会在终端前台运行,一旦关闭终端,进程随着结束,此时希望进程在后台运行不退出,这样关闭终端也不影响进程的正常运行
2)如何把程序放在后台

# 把进程放入后台运行 使用 &
[root@alex ~]# sleep 3000 &
[1] 15909
# 把进程挂起放在后台
[root@alex ~]# sleep 4000
[3]+  Stopped                 sleep 4000 [root@lzy ~]# 
# jobs 显示在后台运行的程序
[root@alex ~]# jobs 
[1]-  Running                 sleep 3000 &
[2]+  Running                 sleep 4000 &
# 让作业2在后台运行
[root@alex ~]# bg %2
[2]+ sleep 4000 &
[root@alex ~]# jobs 
[1]-  Running                 sleep 3000 &
[2]+  Running                 sleep 4000 &
将作业1掉回到前台运行
[root@alex ~]# fg %1
sleep 3000
# 终止后台PID2的进程
[root@alex ~]# kill %2
[root@alex ~]# jobs   
[1]+  Stopped                 sleep 3000
[2]-  Terminated              sleep 4000
# & 后台运行
for i in {1..10};do echo $i;done &   # 内容还是输出到屏幕
for i in {1..10};do echo $i;done &>/dev/null & # 内容定向到空

screen的使用 常用
1)安装
yum –y install screen
2) 使用方法
#screen 指定一个任务名称后进入到一个新bash中

screen -S wget_jenkins
# 在新bash中执行一条下载命令
wget https://pkg.jenkins.io/redhat-stable/jenkins-2.190.1-1.1.noarch.rpm
# 平滑退出screen 不会终止任务,如果使用exit则退出
ctrl+a+d   # 平滑退出screen任务
# 查看正在运行的screen有哪些任务
[root@alex ~]# screen -list
There is a screen on:
        43698.wget_jenkins      (Detached)
1 Socket in /var/run/screen/S-root.
# 进入正在执行的screen任务中 或者使用PID即可进入
[root@alex ~]# screen -r wget_jenkins

进程的优先级

1)在启动进程时,为不同的进程使用不同的调度策略
nice 值越高 表示优先级越低,例如+19 该进程容易将CPU使用量让给其他进程
nice值越低 表示优先级越高,例如-20, 该进程更不倾向于让出CPU
使用top或ps敏玲查看进程的优先级
#使用top可以查看nice优先级 NI:实际nice级别,默认是0 动态修正CPU调度。范围(-20~19)。越大,cpu调度越一般,越小,cpu调度越偏向它。一般用于后台进程,调整也是往大了调,用来给前台进程让出CPU资源
PR: 优先级 显示nice值,PR默认是20,越小,优先级越高。修改nice可以同时修改PR -20映射到0, +19映射到39
在这里插入图片描述
使用ps查看进程优先级
在这里插入图片描述
2)nice指定程序的优先级,语法格式nice -n 优先级数字 进程名称
#开启vim并指定程序优先级为-5 并查看进程优先级
在这里插入图片描述

#renice命令修改一个正在运行的进程优先级,语法格式 renice –n 优先级数字 进程 pid
1)查看sshd进程当前的优先级状态
[root@lzy ~]# ps axo pid,command,nice|grep sshd
1114 /usr/sbin/sshd -D 0
30865 sshd: root@pts/0 0
2) 调整sshd主进程的优先级
[root@lzy ~]# renice -n -20 1114
1114 (process ID) old priority 0, new priority -20
exit 退出当前bash
登陆查看调整或的优先级 再次登陆后会由主进程fork子进程 子进程会继承主进程的优先级
[root@lzy ~]# ps axo pid,command,nice|grep sshd
1114 /usr/sbin/sshd -D -20
43747 sshd: root@pts/0 -20
43770 grep --color=auto sshd -20

扩展: python程序
py aaa.py ccc.py bbb.py
如何启动py程序
nohup count.py –ip –port –redis –mysql &
nohup count.py &
nohup count.py &
nohup count.py &
写入shell脚本 执行运行shell脚本
停止py程序
ps axu|grep count.py|grep –v grep|awk ‘{print $2}’|xargs kill -9
写入pystop.sh
sh pystop.sh
原程序的的标准输出被自动改向到当前目录下的nohup.out文件,起到了log的作用
nohup.out 注意大小

系统平均负载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值