【笔记】进程详解、ps、kill、screen、nohup、进程的优先级

进程基本概述

  1. 什么是进程(process)
    当我们运行一个程序,那么我们将运行的程序叫进程
           PS1:当程序运行为进程后,系统会为该进程分配内存,以及进程运行的身份和权限
           PS2:在进程运行的过程中,服务器上会有各种状态来表示当前进程的指标信息

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

  3. 程序的生命周期
    一个对象从无到有、从有到无过程称为生命周期

在这里插入图片描述

       当父进程接收到任务调度时,会通过fock派生子进程来处理,子进程会继承父进程衣钵(相当于完全复制了一份父进程的信息)

  1. 子进程在处理任务代码时,父进程会进入等待状态中
  2. 子进程在处理任务代码后,会执行退出,然后唤醒父进程来回收子进程的资源
  3. 如果子进程在处理任务过程中,父进程退出,子进程没有退出,子进程没有被父进程管理,则变为僵尸进程
  4. 每个进程都有自己的PID号,子进程称为PPID

监控进程状态

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

使用ps命令静态查看当前的进程状态

       ps -auxf常用组合方式查看进程、PID、占用cpu百分比,占用内存百分比,状态、执行的命令等

  • -a显示所有终端机下执行的进程,除了阶段作业领导者之外
  • -u以用户为主的格式来显示进程状况
  • -x显示所有进程,不以终端机来区分
  • -f用ASCII字符显示树状结构,表达进程间的相互关系
[root@b13k ~]#ps -auxf
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          2  0.0  0.0      0     0 ?        S    00:33   0:00 [kthreadd]
root          4  0.0  0.0      0     0 ?        S<   00:33   0:00  \_ [kworker/0:0H]
root          6  0.0  0.0      0     0 ?        S    00:33   0:01  \_ [ksoftirqd/0]
root          7  0.0  0.0      0     0 ?        S    00:33   0:00  \_ [migration/0]
root          8  0.0  0.0      0     0 ?        S    00:33   0:00  \_ [rcu_bh]
root          9  0.0  0.0      0     0 ?        S    00:33   0:03  \_ [rcu_sched]
#太长

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

STAT基本状态描述STAT状态+符号描述
R进程运行s进程是控制进程, Ss进程的领导者,父进程
S可中断睡眠<进程运行在高优先级上,S<优先级较高的进程
T进程被暂停N进程运行在低优先级上,SN优先级较低的进程
D不可中断睡眠+当前进程运行在前台,R+该表示进程在前台运行
Z僵尸进程l进程是多线程的,Sl表示进程是以线程方式运行

案例1:

1)在终端1运行vim
[root@b13k ~]#vim 1234.txt
2)在终端2上运行ps命令查看状态

[root@b13k ~]#ps -axu |grep vim
root      35876  0.0  0.5 149496  5256 pts/1    S+   14:38   0:00 vim 1234.txt
root      35928  0.0  0.0 112808   960 pts/0    R+   14:39   0:00 grep --color=auto vim

3)在终端1上挂起vim命令按下:ctrl + z

4)回到终端2再次运行ps命令查看状态

[root@b13k ~]#ps -aux|grep vim
root       1420  0.0  0.5 149492  5264 pts/0    T    14:54   0:00 vim 1234.txt
root       1424  0.0  0.0 112808   956 pts/1    R+   14:55   0:00 grep --color=auto vim

案例2:

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

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

使用top命令动态查看当前的进程状态

[root@b13k ~]#top

top - 15:04:44 up 20 min,  2 users,  load average: 0.00, 0.01, 0.02
Tasks:  95 total,   2 running,  92 sleeping,   1 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :   995684 total,   770580 free,   118024 used,   107080 buff/cache
KiB Swap:  2047996 total,  2047996 free,        0 used.   745704 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                                                                  
     6 root      20   0       0      0      0 S  0.3  0.0   0:00.09 ksoftirqd/0                                                                              
   800 root      20   0  231548   6388   5024 R  0.3  0.6   0:02.15 vmtoolsd                                                                                 
     1 root      20   0  125900   4376   2576 S  0.0  0.4   0:01.17 systemd                                                                                  
     2 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kthreadd                                                                                 
     4 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0H                                                                                    

Tasks: 95 total———当前进程的总数
2 running —————正在运行的进程数
92 sleeping————–睡眠的进程数
1 stopped —————停止的进程数
0 zombie—————–僵尸进程数
%Cpu(s): 0.0 us ——系统用户进程使用CPU百分比
5.7 sy ——————–内核进程占用CPU百分比,内核是于硬件进行交互
45.2 id——————–空闲CPU的百分比
0.0 ni———————用户进程空间内改变过优先级的进程占用CPU百分比
0.0 wa——————–CPU等待IO完成的时间
0.0 hi———————硬中断,占的CPU百分比
0.0 si———————软中断,占的CPU百分比
0.0 st———————比如虚拟机占用物理CPU的时间

什么是中断?

       中断就是终止当前在做的事情 去执行另一段程序
       会保留现场,执行的那段程序做完之后会在回来执行刚来尚未完成的部分
在这里插入图片描述
       跟人类似,CPU也要面对这样复杂的局面,意外是无处不在的-有可能是用户等的不耐烦,猛敲键盘,有可能网卡突然接收到一个新的数据库包,这些都是需要CPU具体情况具体分析,要么马上处理,要么暂缓响应,无论如何应对,都需要CPU暂停手头的工作,拿出一种对策,只有在响应之后,方能回头完成先前的使命 有了中断CPU才有并行处理能力

软中断和硬中断的区别

软中断硬中断
是否有随机性 突发性
是否有中断响应周期
中断类型号的提供方法固定或由指令提供由中断控制器提供

什么是CPU上下文切换

       CPU在不同的任务之前切换需要保存任务的运行资源记录:CPU得知道从哪里去加载任务,又从哪里开始运行所以需要用到CPU寄存器和程序计数器。在理解上面的基础上CPU上下文切换就是保存上一个任务运行的寄存器和计数器信息切换到加载下一个任务的寄存器和计数器的过程

管理进程状态 kill、killall、pkill

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

[root@b13k ~]#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	

虽然Linux信号很多,但是我们仅仅使用最常用的3个信号

  1. SIGHUP 重新加载配置文件 1
    kill -1 实际执行reload操作,并不会关闭进程
  2. SIGKILL 强制杀死进程 9
    kill -9 会直接关闭进程,进程在结束后不能自我清理,导致系统资源无法正常释放
  3. SIGTERM 终止进程,默认kill使用该信号 15
    kill -15的效果是正常退出进程,退出前可以被阻塞或回调处理

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

killall命令, 杀死同一进程组内的所有进程,其允许指定要终止的进程的名称,而非PID
使用killall直接杀死进程

 [root@b13k ~]# killall sleep

       pkill是ps命令和kill命令的结合,pkill和killall应用方法差不多,按照进程名来杀死指定进程组,pkill可以踢出用户登录也可以踢出虚拟终端
使用pkill直接杀死进程

 [root@b13k ~]# pkill sleep

使用pkil踢出用户

[root@b13k ~]#ps aux | grep ahui
root       1504  0.0  0.2 191880  2336 pts/2    S    15:55   0:00 su - ahui
ahui       1505  0.0  0.2 116336  2772 pts/2    S+   15:55   0:00 -bash
root       1535  0.0  0.0 112808   956 pts/0    R+   15:55   0:00 grep --color=auto ahui
[root@b13k ~]#pkill -kill -U ahui
[root@b13k ~]#ps aux | grep ahui
root       1552  0.0  0.0 112808   956 pts/0    R+   15:56   0:00 grep --color=auto ahui

使用pkill踢出从远程登录到本机的用户,终止pts1上所有进程,用户强制退出

[root@b13k ~]# pkill -9 -t pts/1  #-9 == -kill

管理后台进程

什么是后台进程

       进程都会在终端前台运行,一旦关闭终端,进程随着结束,此时希望进程在后台运行不退出,这样关闭终端也不影响进程的正常运行

如何把程序放在后台

把进程放入后台运行 使用 &

[root@b13k ~]#sleep 60000 &
[1] 1556

ctrl + z把进程挂起放在后台

[root@b13k ~]#sleep 50000
^Z
[2]+  Stopped                 sleep 50000

使用 jobs 查看在后台运行的程序

[root@b13k ~]#jobs
[1]-  Running                 sleep 60000 &
[2]+  Stopped                 sleep 50000

使用 bg 让作业2在后台运行

[root@b13k ~]#bg %2
[2]+ sleep 50000 &
[16:13:19 root@b13k ~]#jobs
[1]-  Running                 sleep 60000 &
[2]+  Running                 sleep 50000 &

使用 fg 将作业1掉回到前台运行

[root@b13k ~]#fg %1
sleep 60000

使用 kill 终止后台PID为2的进程

[root@b13k ~]#kill %2
[root@b13k ~]#jobs
[1]+  Stopped                 sleep 60000
[2]-  Terminated              sleep 50000

使后台运行的进程不再输出到屏幕

[root@b13k ~]#for i in {1..10};do echo $i;done &
[1] 1562
[16:22:40 root@b13k ~]#1		#在后台运行时输出到屏幕
2
3
4
5
6
7
8
9
#不论命令成功或失败都输出到空
[root@b13k ~]#for i in {1..10};do echo $i;done &> /dev/null &
[8] 1570
[6]   Done                    for i in {1..10};
do
    echo $i;
done
[7]   Done                     > /dev/null
[root@b13k ~]#

screen

       Screen可以看作是窗口管理器的命令行界面版本。它提供了统一的管理多个会话的界面和相应的功能。
只要Screen本身没有终止,在其内部运行的会话都可以恢复。
screen需要安装

yum -y install screen

使用方式:
1)screen 指定一个任务名称后进入到一个新bash中

[root@b13k ~]# screen -S wget_mangodb

2)在新bash中执行一条下载命令


[root@b13k ~]# wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.6.13.tgz

3)使用如果ctrl + a + d 平滑退出screen任务,如果使用exit则退出screen
4)使用-list参数查看正在运行的screen有哪些任务

[root@b13k ~]#screen -list
There is a screen on:
	1592.wget_mongodb	(Detached)
1 Socket in /var/run/screen/S-root.

5)使用-r参数进入正在执行的screen任务中 或者使用PID即可进入

[root@b13k ~]# screen -r wget_mangodb

nohup

使用nohup 不需要安装
nohup会不挂断地运行命令
nohup默认会在当前执行命令的位置生成一个nohup.out文件
会接收程序运行中产生的所有的内容
让服务进程放在后台持续不断的运行
预备文件

[16:54:20 root@b13k ~]#cat test.sh
for i in {1..10};do echo $i;done
[16:54:20 root@b13k ~]#cat test1.sh
for i in {11..20};do echo $i;done

nohup 放在后台执行的命令 &

[16:54:06 root@b13k ~]#nohup sh test.sh &
[1] 1644
[16:54:13 root@b13k ~]#nohup: ignoring input and appending output to ‘nohup.out’

[1]+  Done                    nohup sh test.sh
[16:54:13 root@b13k ~]#cat nohup.out 
1
2
3
4
5
6
7
8
9
10

写入脚本

[root@b13k ~]#cat start_test.sh 
nohup sh test.sh &
nohup sh test1.sh &

启动

[root@b13k ~]#sh start_test.sh 
[root@b13k ~]#nohup: appending output to ‘nohup.out’
nohup: appending output to ‘nohup.out’
^C
[17:02:05 root@b13k ~]#cat nohup.out 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

进程的优先级

1)在启动进程时,为不同的进程使用不同的调度策略
nice 值越高 表示优先级越低,例如+19 该进程容易将CPU使用量让给其他进程
nice值越低 表示优先级越高,例如-20, 改进程更不倾向于让出CPU
使用top或ps命令查看进程的优先级

 PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                                                                                                      
   1 root      20   0  125900   4376   2576 S  0.0  0.4   0:01.17 systemd                                                                                  
   2 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kthreadd                                                                                 
   4 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0H       

# 使用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
    

小结

  1. 进程基本概述
  2. 使用ps命令静态查看当前的进程状态
    ps -auxf常用组合方式查看进程、PID、占用cpu百分比,占用内存百分比,状态、执行的命令等
    -a显示所有终端机下执行的进程,除了阶段作业领导者之外
    -u以用户为主的格式来显示进程状况
    -x显示所有进程,不以终端机来区分
    -f用ASCII字符显示树状结构,表达进程间的相互关系
  3. 什么是中断?
    中断就是终止当前在做的事情 去执行另一段程序
    会保留现场,执行的那段程序做完之后会在回来执行刚来尚未完成的部分
  4. kill、killall 、pkill
    kill-1 实际执行reload操作,并不会关闭进程
    kill -9 会直接关闭进程,进程在结束后不能自我清理,导致系统资源无法正常释放
    kill-15的效果是正常退出进程,退出前可以被阻塞或回调处理,默认kill使用该信号 15
    killall 杀死同一进程组内的所有进程,其允许指定要终止的进程的名称,而非PID
    pkill是ps命令和kill命令的结合,pkill和killall应用方法差不多,按照进程名来杀死指定进程组,pkill可以踢出用户登录也可以踢出虚拟终端
  5. 如何把程序放在后台?
    在结尾加上&会把进程放入后台运行
    ctrl + z把进程挂起放在后台
  6. screen
    Screen可以看作是窗口管理器的命令行界面版本。
    -r 进入正在执行的screen
    -list 查看正在运行的screen
  7. nohup
    不挂断地运行命令
  8. 进程的优先级
    nice 值越高 表示优先级越低
    nice值越低 表示优先级越高
    调整优先级:renice -n nice级别 pid
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值