你好,游客 登录 注册 搜索
背景:
阅读新闻

RHEL7进程管理

[日期:2016-08-29] 来源:Linux社区  作者:sakuraph [字体: ]

进程概念

名称说明
程序 一组指令的集合
进程 程序的执行就是进程也可以把进程看成一个独立的程序
在内存中有其对应的代码空间和数据空间,一个进程所拥有的数据和代码只属于自己
进程是资源分配的基本单位,也是调度运行的基本单位
线程 线程被人们认为是轻量级的进程,它是进程中单独运行的程序

一个进程可以包含多个线程且至少有一个主线程,同一进程的线程共享该进程的代码和数据

程序进程线程

程序和进程的区别

  • 程序是静态的,它只是一组指令的集合,不具有任何的运行意义。而进程是程序运行的动态过程
  • 进程和程序并不是一一对应的关系,相同的程序运行在不同的数据集上就是不同的进程
  • 进程还具有并发性和交往性,而程序却是封闭的

进程和线程的区别

  • 一个进程可以拥有多个线程,而一个线程同时只能被一个进程所拥有
  • 线程不能单独执行,但是每一个线程都有程序的入口、执行序列以及程序出口,它必须组成进程才能被执行

进程属性

进程属性

进程管理工具

对于Linux进程的管理,是通过进程管理工具实现的,比如ps、kill

静态查看进程

命令:ps
作用:查看系统进程( 静态查看
语法:ps [选项]

选项说明
-a 显示所有用户的进程
-u 显示用户名和启动时间
-x 显示没有控制终端的进程
-e 显示所有进程,包括没有控制终端的进程
-l 长格式显示
-w 宽行显示,可以使用多个w进行加宽显示

我们常用的选项是组合是aux
查看隶属于自己的进程

[root@VM_200_13_CentOS ~]# ps -u
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root      1275  0.0  0.0   6452   804 ttyS0    Ss+  Aug15   0:00 /sbin/agetty --keep-baud 115200 3
root      1276  0.0  0.0 110032   856 tty1     Ss+  Aug15   0:00 /sbin/agetty --noclear tty1 linux
root      2828  0.0  0.2  12684  2888 pts/0    Ss   14:33   0:00 -bash
root      2979  0.0  0.1  35888  1476 pts/0    R+   14:34   0:00 ps -u

查看所有用户的进程和没有控制终端的进程

[root@VM_200_13_centos ~]# ps -aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.7  44800  7272 ?        Ss   Aug15   0:22 /usr/lib/systemd/systemd --switch
root         2  0.0  0.0      0     0 ?        S    Aug15   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    Aug15   0:00 [ksoftirqd/0]
root         5  0.0  0.0      0     0 ?        S<   Aug15   0:00 [kworker/0:0H]
root         7  0.0  0.0      0     0 ?        S    Aug15   0:00 [migration/0]
root         8  0.0  0.0      0     0 ?        S    Aug15   0:00 [rcu_bh]
root         9  0.0  0.0      0     0 ?        S    Aug15   0:00 [rcuob/0]
root        10  0.0  0.0      0     0 ?        R    Aug15   0:03 [rcu_sched]
root        11  0.0  0.0      0     0 ?        S    Aug15   0:06 [rcuos/0]
root        12  0.0  0.0      0     0 ?        S    Aug15   0:00 [watchdog/0]
root        13  0.0  0.0      0     0 ?        S<   Aug15   0:00 [khelper]
...

ps -aux输出解释:

名称说明
USER 进程所有者
PID 进程ID
%CPU 占用的CPU使用率
%MEM 占用的内存使用率
VSZ 占用的虚拟内存大小
RSS 占用的内存大小
TTY 终端的次要装置号码 (minor device number of tty)
STAT 进程状态
START 启动进程的时间
TIME 进程消耗CPU的时间
COMMAND 命令的名称和参数

进程状态:

状态说明
D 无法中断的休眠状态(通常为IO进程)
R 正在运行,在可中断队列中
S 处于休眠状态,静止状态
T 停止或被追踪,暂停执行
W 进入内存交换(从内核2.6开始无效)
X 死掉的进程
Z 僵尸进程不存在但暂时无法消除
< 高优先级进程
N 低优先级进程
L 有记忆体分页分配并锁在记忆体内
s 进程的领导者(在它之下有子进程)
l 多进程的
+ 位于后台的进程组

查看nginx进程

[root@VM_200_13_centos ~]# ps -aux | grep nginx
root      5092  0.0  0.0   9036   672 pts/0    R+   15:07   0:00 grep --color=auto nginx
root     17698  0.0  0.0  20468   604 ?        Ss   Aug15   0:00 nginx: master process nginx
nginx    17699  0.0  0.1  22980  1612 ?        S    Aug15   0:00 nginx: worker process

动态查看进程

命令:top
作用:动态 显示当前系统正在执行的进程的相关信息,包括进程ID、内存占用率、CPU占用率等
语法:top [选项]
说明:默认3s刷新一次,按空格立即刷新,按q退出,按大写M则根据内存排序,按P则根据CPU排序

选项说明
-b 批处理
-c 显示完整的治命令
-I 忽略失效过程
-s 保密模式
-S 累积模式
-i<时间> 设置间隔时间
-u<用户名> 指定用户名
-p<进程号> 指定进程
-n<次数> 循环显示的次数
top - 15:58:43 up 2 days, 14:09,  1 user,  load average: 0.00, 0.01, 0.05
Tasks:  77 total,   3 running,  74 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.2 us,  0.2 sy,  0.0 ni, 99.5 id,  0.1 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  1016916 total,   533700 free,    90484 used,   392732 buff/cache
KiB Swap:        0 total,        0 free,        0 used.   768064 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                       
    1 root      20   0   44900   7360   2364 S  0.0  0.7   0:23.01 systemd                       
    2 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kthreadd                      
    3 root      20   0       0      0      0 S  0.0  0.0   0:00.56 ksoftirqd/0                   
    5 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0H                  
    7 root      rt   0       0      0      0 S  0.0  0.0   0:00.00 migration/0                   
    8 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcu_bh                        
    9 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcuob/0                       
   10 root      20   0       0      0      0 S  0.0  0.0   0:03.61 rcu_sched                     
   11 root      20   0       0      0      0 R  0.0  0.0   0:06.97 rcuos/0                       
   12 root      rt   0       0      0      0 S  0.0  0.0   0:00.14 watchdog/0                    
   13 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 khelper                       
   14 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kdevtmpfs                     
   15 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 netns                         
   16 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 perf                          
   17 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 writeback                     
   18 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kintegrityd                   
   19 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 bioset                        
   20 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kblockd                       
   21 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 md                            
   26 root      20   0       0      0      0 S  0.0  0.0   0:00.03 khungtaskd                    
   27 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kswapd0                       
   28 root      25   5       0      0      0 S  0.0  0.0   0:00.00 ksmd                          
   29 root      39  19       0      0      0 S  0.0  0.0   0:00.56 khugepaged                    
   30 root      20   0       0      0      0 S  0.0  0.0   0:00.00 fsnotify_mark                 
   31 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 crypto                        
   39 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kthrotld                      
   41 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kmpath_rdacd                  
   42 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kpsmoused                     
   43 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 ipv6_addrconf                 
   63 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 deferwq                       
  101 root      20   0       0      0      0 S  0.0  0.0   0:00.18 kauditd                       
  213 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 ata_sff

前五行是当前系统情况整体的统计信息区,下面我们看每一行信息的具体意义

第一行:任务队列信息

字段说明
15:58:43 Item Two
up 2 days, 14:09 系统已经运行了2天14小时9分钟
1 users 当前登录用户数
load average: 0.00, 0.01, 0.05 系统负载,即任务队列的平均长度
三个数值分别为:1分钟、5分钟、15分钟前到现在的平均值

第二行:进程信息

字段说明
77 total 进程总数
3 running 正在运行的进程数
74 sleeping 睡眠的进程数
0 stopped 停止的进程数
0 zombie 僵尸进程数

第三行:CPU信息(如果有多个CPU的话信息会超过两行)

字段说明
0.2 us 系统用户进程使用CPU百分比
0.2 sy 内核中的进程占用CPU百分比
0.0 ni 用户进程空间内改变过优先级的进程占用CPU百分比
99.5 id 空闲CPU百分比
0.1 wa IO等待占用CPU的百分比
0.0 hi 硬中断(Hardware IRQ)占用CPU的百分比
0.0 si 软中断(Software Interrupts)占用CPU的百分比
0.0 st 虚拟机偷取时间

第四行:内存信息

字段说明
1016916 total 物理内存总量
533700 free 空闲内存总量
90484 used 使用的物理内存总量
392732 buff/cache 用作内核缓存的内存量
和命令free –k一个意思

第五行:交换区信息

字段说明
0 total 交换区总量
0 free 空闲交换区总量
0 used 使用的交换区总量
768064 avail Mem 总的可利用内存是多少

剩下的则是进程信息:

字段说明
PID 进程ID
USER 进程所有者
PR 进程优先级
NI nice值,负值表示高优先级,正值表示低优先级
VIRT 进程使用的虚拟内存总量,单位kb,VIRT=SWAP+RES
RES 进程使用的、未被换出的物理内存大小,单位kb,RES=CODE+DATA
SHR 共享内存大小,单位kb
S 进程状态
%CPU 上次更新到现在的CPU时间占用百分比
%MEM 进程使用的物理内存百分比
TIME+ 进程使用的CPU时间总计,单位1/100秒
COMMAND 进程名称(命令名/命令行)

查找某个服务的进程号

[root@VM_200_13_centos ~]# pgrep ssh
697
8435

以树状图显示进程间的关系

命令:pstree
作用:以树状图显示进程,只显示进程的名字,且相同进程合并显示
语法:pstree [选项]

选项说明
-a 显示命令行参数
-A 使用ASCII字符线
-c 不适用紧凑连接方式显示
-h 高亮所有的进程和其父进程的PID
-H 高亮指定的进程和其父进程的PID
-g 显示进程所属的用户组ID
-G 使用VT100字符线
-n 根据PID排序
-p 显示PID
-s 显示父进程
[root@VM_200_13_centos ~]# pstree -p
systemd(1)-+-acpid(474)
           |-agetty(1275)
           |-agetty(1276)
           |-atd(472)
           |-auditd(430)---{auditd}(448)
           |-barad_agent(1938)-+-barad_agent(1939)
           |                   `-barad_agent(1940)-+-{barad_agent}(1941)
           |                                       `-{barad_agent}(2009)
           |-chronyd(477)
           |-crond(473)
           |-dbus-daemon(454)
           |-lsmd(452)
           |-lvmetad(357)
           |-nginx(17698)---nginx(17699)
           |-rsyslogd(469)-+-{rsyslogd}(485)
           |               `-{rsyslogd}(486)
           |-sap1002(1853)
           |-sap1007(1861)
           |-secu-tcs-agent(1153)---sap1004(1859)
           |-sgagent(1922)---{sgagent}(1923)
           |-sshd(697)---sshd(8435)---bash(8437)---pstree(11096)
           |-systemd-journal(329)
           |-systemd-logind(458)
           |-systemd-udevd(359)
           `-tuned(695)-+-{tuned}(1329)
                        |-{tuned}(1330)
                        |-{tuned}(1332)
                        `-{tuned}(1335)

查询网络相关的进程

介绍netstat工具

命令:netstat
作用:显示各种网络相关信息,如网络连接,路由表,接口状态
语法:netstat [选项]

选项说明
-a或–all 显示所有连接中的接口
-c或–continuous 持续列出网络状态
-C或–cache 显示路由器配置的快取信息
-e或–extend 显示网络其他相关信息
-F或–fib 显示FIB
-g或–groups 显示多重广播功能群组组员名单
-i或–interfaces 显示网络界面信息表单
-l或–listening 显示监控中的服务器的接口
-M或–masquerade 显示伪装的网络连线
-n或–numeric 直接使用IP地址,而不通过域名服务器
-N或–netlink或–symbolic 显示网络硬件外围设备的符号连接名称
-o或–timers 显示计时器
-p或–programs 显示正在使用接口的程序识别码和程序名称
-r或–route 显示路由表
-s或–statistice 显示网络工作信息统计表
-t或–tcp 显示TCP传输协议的连接状况
-u或–udp 显示UDP传输协议的连接状况
-v或–verbose 显示指令执行过程
-w或–raw 显示RAW传输协议的连线状况
-x或–unix 此参数的效果和指定-A unix参数相同
–ip或–inet 此参数的效果和指定-A inet参数相同

查看所有的TCP端口

[root@VM_200_13_centos ~]# netstat -anlpt
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name

tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      17698/nginx: mast
er
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      697/sshd         

tcp        0      0 10.104.200.13:80        115.221.11.116:2137     ESTABLISHED 17699/nginx: work
er
tcp        0      0 10.104.200.13:80        115.221.14.249:4282     ESTABLISHED 17699/nginx: work
er
tcp        0      0 10.104.200.13:80        115.221.11.116:3583     ESTABLISHED 17699/nginx: work
er
tcp        0     52 10.104.200.13:22        182.150.21.5:6390       ESTABLISHED 8435/sshd: root@p
ts
tcp        0      0 10.104.200.13:80        115.221.14.139:4747     FIN_WAIT2   -                

tcp        0      0 10.104.200.13:80        115.221.11.116:3797     ESTABLISHED 17699/nginx: work
er
tcp        0      0 10.104.200.13:80        115.221.11.116:3276     FIN_WAIT2   -                

tcp        0      0 10.104.200.13:59586     10.249.80.72:9988       ESTABLISHED 1153/secu-tcs-age
nt
tcp        0      0 10.104.200.13:80        115.221.12.48:1670      FIN_WAIT2   -                

tcp6       0      0 :::22                   :::*                    LISTEN      697/sshd  

查看某个服务的端口

[root@VM_200_13_centos ~]# netstat -anlp | grep ssh
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      697/sshd            
tcp        0     52 10.104.200.13:22        182.150.21.5:6390       ESTABLISHED 8435/sshd: root@pts
tcp6       0      0 :::22                   :::*                    LISTEN      697/sshd            
unix  3      [ ]         STREAM     CONNECTED     12545    697/sshd             
unix  2      [ ]         DGRAM                    1401521  8435/sshd: root@pts

查看所有的UDP端口

[root@VM_200_13_centos ~]# netstat -anlpu          
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
udp        0      0 127.0.0.1:323           0.0.0.0:*                           477/chronyd         
udp6       0      0 ::1:323                 :::*                                477/chronyd

查看nginx

[root@VM_200_13_centos ~]# netstat -anlp | grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      17698/nginx: master
tcp        0      0 10.104.200.13:80        115.221.11.116:4493     ESTABLISHED 17699/nginx: worker
tcp        0      0 10.104.200.13:80        115.221.12.48:2473      ESTABLISHED 17699/nginx: worker
unix  3      [ ]         STREAM     CONNECTED     488644   17698/nginx: master  
unix  3      [ ]         STREAM     CONNECTED     488643   17698/nginx: master

控制进程

命令:kill
作用:通过信号的方式来控制进程
语法:kill [选项] [进程号]

选项说明
-l 若果不加指定的信号编号参数,则使用“-l”参数会列出全部的信号名称
-a 当处理当前进程时,不限制命令名和进程号的对应关系
-p 指定kill命令只打印相关进程的进程号,而不发送任何信号
-u 指定用户
-s 指定发送信号
  • kill命令可以带信号号码选项,也可以不带。如果没有信号号码,kill命令就会发出终止信号(15),这个信号可以被进程捕获,使得进程在退出之前可以清理并释放资源
    也可以用kill向进程发送特定的信号,例如:kill -2 123
    它的效果等同于在前台运行PID为123的进程时按下Ctrl+C键。但是,普通用户只能使用不带signal参数的kill命令或最多使用-9信号
  • kill可以带有进程ID号作为参数。当用kill向这些进程发送信号时,必须是这些进程的主人。如果试图撤销一个没有权限撤销的进程或撤销一个不存在的进程,就会得到一个错误信息
  • 可以向多个进程发信号或终止它们
  • 当kill成功地发送了信号后,shell会在屏幕上显示出进程的终止信息。有时这个信息不会马上显示,只有当按下Enter键使shell的命令提示符再次出��时,才会显示出来
  • 应注意,信号使进程强行终止,这常会带来一些副作用,如数据丢失或者终端无法恢复到正常状态
    发送信号时必须小心,只有在万不得已时,才用kill信号(9),因为进程不能首先捕获它
    要撤销所有的后台作业,可以输入kill 0,因为有些在后台运行的命令会启动多个进程,跟踪并找到所有要杀掉的进程的PID是件很麻烦的事
    这时,使用kill 0来终止所有由当前shell启动的进程,是个有效的方法

查看所有的进程信号

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

关闭进程

[root@VM_200_13_centos ~]# vim test.txt

[1]+  Stopped                 vim test.txt
[root@VM_200_13_centos ~]# ps -aux | grep vim
root     14797  0.0  0.4  49768  4848 pts/0    T    17:38   0:00 vim test.txt
root     14859  0.0  0.0   9036   668 pts/0    R+   17:39   0:00 grep --color=auto vim
[root@VM_200_13_centos ~]# kill -9 14797
[root@VM_200_13_centos ~]# ps -aux | grep vim
root     14870  0.0  0.0   9036   672 pts/0    R+   17:39   0:00 grep --color=auto vim
[1]+  Killed                  vim test.txt

重启进程

[root@VM_200_13_centos ~]# ps -aux | grep nginx
root      8582  0.0  0.0   9036   672 pts/0    R+   00:40   0:00 grep --color=auto nginx
root     17698  0.0  0.0  20468   604 ?        Ss   Aug15   0:00 nginx: master process nginx
nginx    17699  0.0  0.1  22980  1612 ?        S    Aug15   0:01 nginx: worker process
[root@VM_200_13_centos ~]# kill -1 17698

终止所有进程

linux系统中的killall命令用于杀死指定名字的进程(kill processes by name)
我们可以使用kill命令杀死指定进程PID的进程,如果要找到我们需要杀死的进程,我们还需要在之前使用ps等命令再配合grep来查找进程
而killall把这两个过程合二为一,是一个很好用的命令

命令:killall
作用:用来结束同名的的所有进程
语法:killall [选项] 进程名称

选项说明
-Z 只杀死拥有context的进程
-e 要求匹配进程名称
-I 不区分大小写匹配进程名称
-g 杀死进程组而不是进程
-i 交互模式,杀死进程前先询问用户
-l 列出所有的已知信号名称
-q 不输出警告信息
-s 发送指定的信号
-w 等待进程死亡
-v 报告信号是否成功发送
-r 使用正则表达式匹配进程名
-u 只杀死用户运行的进程

关闭所有httpd进程
[root@VM_200_13_centos ~]# yum -y install httpd [root@VM_200_13_centos ~]# systemctl start httpd [root@VM_200_13_centos3 ~]# ps -aux | grep httpd root 39962 0.0 0.1 226128 5052 ? Ss 08:38 0:00 /usr/sbin/httpd -DFOREGROUND apache 39974 0.0 0.0 228212 3128 ? S 08:39 0:00 /usr/sbin/httpd -DFOREGROUND apache 39975 0.0 0.0 228212 3128 ? S 08:39 0:00 /usr/sbin/httpd -DFOREGROUND apache 39976 0.0 0.0 228212 3128 ? S 08:39 0:00 /usr/sbin/httpd -DFOREGROUND apache 39977 0.0 0.0 228212 3128 ? S 08:39 0:00 /usr/sbin/httpd -DFOREGROUND apache 39978 0.0 0.0 228212 3128 ? S 08:39 0:00 /usr/sbin/httpd -DFOREGROUND root 39985 0.0 0.0 112644 956 pts/1 S+ 08:39 0:00 grep --color=auto httpd [root@VM_200_13_centos3 ~]# killall httpd

虚拟文件系统

Linux一切皆文件,设备(文件)可以通过读写来操作

/proc是内存中有关 系统进程 的信息
/sys是有关 系统内核以及驱动 的信息

查看当前CPU信息

[root@VM_200_13_centos ~]# cat /proc/cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 63
model name      : Intel(R) Xeon(R) CPU E5-26xx v3
stepping        : 2
microcode       : 0x1
cpu MHz         : 2294.686
cache size      : 4096 KB
physical id     : 0
siblings        : 1
core id         : 0
cpu cores       : 1
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall
 nx lm constant_tsc rep_good nopl eagerfpu pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer
 aes xsave avx f16c rdrand hypervisor lahf_lm abm xsaveopt
bogomips        : 4589.37
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management:

开启内核转发功能

[root@VM_200_13_centos ~]# echo "1" > /proc/sys/net/ipv4/ip_forward
[root@VM_200_13_centos ~]# cat /proc/sys/net/ipv4/ip_forward
1

后台进程与前台进程

后台进程:
也叫守护进程(Daemon),是运行在后台的一种特殊进程,守护的意思就是不受终端控制。Linux的大多数服务器就是用守护进程实现的比如,Web服务器httpd等
前台进程:
用户使用的有控制终端的进程
跟系统任务相关的几个命令:fg、bg、jobs、&、ctrl+z
| Header One | Header Two |
| :------------- | :------------- |
| & | 用在一个命令的最后,可以把这个命令放到后台执行 |
| ctrl+z | 将一个正在前台执行的命令放到后台,并且暂停 |
| jobs | 查看当前有多少在后台运行的进程 |
| fg | 将后台中的命令调至前台继续运行
如果后台中有多个命令,可以用 fg %jobnumber将选中的命令调出
%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid) |
| bg | 将一个在后台暂停的命令,变成继续执行
如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出
%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid) |
恢复被挂起的进程

[root@VM_200_13_centos ~]# vim test.txt

[1]+  Stopped                 vim test.txt
[root@VM_200_13_centos ~]# ps -aux |grep vim
root     13516  0.1  0.4  49756  4804 pts/0    T    17:18   0:00 vim test.txt
root     13518  0.0  0.0   9036   672 pts/0    R+   17:18   0:00 grep --color=auto vim
[root@VM_200_13_centos ~]# jobs
[1]+  Stopped                 vim test.txt
[root@VM_200_13_centos ~]# fg %1
vim test.txt

进程的优先级管理

优先级取值范围为[-20,19],越小优先级越高, 默认优先级是0

设置进程的优先级

命令:nice
作用:设置进程的优先级
语法:nice [选项] 命令
说明:nice的选项只有一个-n,参数后面跟上[-20,19]范围内的值,不使用该参数则以10为值设置nice值

[root@VM_200_13_centos ~]# nice vim v.txt

[1]+  Stopped                 nice vim v.txt
[root@VM_200_13_centos ~]# ps -aux | grep vim
root     10029  0.0  0.4  49748  4800 pts/0    TN   01:01   0:00 vim v.txt
root     10038  0.0  0.0   9036   672 pts/0    R+   01:01   0:00 grep --color=auto vim

使用top命令查看上面操作的nice值

[root@VM_200_13_centos ~]# top -n 1 -p 10029
top - 01:03:25 up 2 days, 23:13,  1 user,  load average: 0.00, 0.01, 0.05
Tasks:   1 total,   0 running,   0 sleeping,   1 stopped,   0 zombie
%Cpu(s):  0.2 us,  0.2 sy,  0.0 ni, 99.5 id,  0.1 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  1016916 total,   511816 free,    93860 used,   411240 buff/cache
KiB Swap:        0 total,        0 free,        0 used.   763804 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                       
10029 root      30  10   49748   4800   2484 T  0.0  0.5   0:00.02 vim                             

调整进程优先级

命令:renice
作用:改变一个正在运行的进程的优先级
语法:renice [-n] 优先级值 [-gpu] identifier..

选项说明
-n 修改运行中进程的优先级,后面跟上[-20,19]范围内的值
-g 强制将后续的参数解释为进程所属用户的属组GID
-p 强制将后续的参数解释为进程PID,这个参数是默认使用的
-u 强制将后续的参数解释为进程所属用户的UID
[root@VM_200_13_centos ~]# ps -aux | grep vim
root     10029  0.0  0.4  49748  4800 pts/0    TN   01:01   0:00 vim v.txt
root     10909  0.0  0.0   9036   668 pts/0    R+   01:15   0:00 grep --color=auto vim
[root@VM_200_13_centos ~]# renice -n -20 10029
10029 (process ID) old priority 10, new priority -20

远程会话管理工具

Screen是Linux下的一款远程会话管理工具,可以在多个进程之间多路复用一个物理终端的全屏窗口管理器
它可以创建多个会话(Session),每个会话中可以创建多个窗口(Window)
每个窗口中可以运行单独的任务,并且互相之间不受影响,还可以方便快速的在不同的窗口和会话之间切换
Screen可以看作是窗口管理器的命令行界面版本。它提供了统一的管理多个会话的界面和相应的功能

  • 会话恢复
    只要Screen本身没有终止,在其内部运行的会话都可以恢复
    这一点对于远程登录的用户特别有用——即使网络连接中断,用户也不会失去对已经打开的命令行会话的控制
    只要再次登录到主机上执行screen -r就可以恢复会话的运行
    同样在暂时离开的时候,也可以执行分离命令detach,在保证里面的程序正常运行的情况下让Screen挂起(切换到后台)
  • 多窗口
    在Screen环境下,所有的会话都独立的运行,并拥有各自的编号、输入、输出和窗口缓存
    用户可以通过快捷键在不同的窗口下切换,并可以自由的重定向各个窗口的输入和输出
    Screen实现了基本的文本操作,如复制粘贴等;还提供了类似滚动条的功能,可以查看窗口状况的历史记录
    窗口还可以被分区和命名,还可以监视后台窗口的活动
  • 会话共享
    Screen可以让一个或多个用户从不同终端多次登录一个会话,并共享会话的所有特性(比如可以看到完全相同的输出)
    它同时提供了窗口访问权限的机制,可以对窗口进行密码保护

    使用场景

    在VPS中执行一些非常耗时的任务时(如下载,压缩,解压缩,编译,安装等)
    我们通常是单独开一个远程终端窗口来执行这个任务,且在任务执行过程中不能关闭这个窗口或者中断连接,否则正在执行的任务会被终止掉
    而有了screen,我们可以在一个窗口中安装程序,然后在另一个窗口中下载文件,再在第三个窗口中编译程序
    只需要一个SSH连接就可以同时执行这三个任务,还可以方便的在不同会话或窗口中切换
    即使因为意外导致窗口关闭或者连接中断,也不会影响这三个任务的执行

    使用说明

    命令:screen
    作用:可以在多个进程之间多路复用一个物理终端的全屏窗口管理器
    语法:screen [选项] [命令]

选项说明
-ls 查看所有screen会话
-r 重新连接指定id的会话(使用-ls可以查看到会话id)
-L 打开输出日志
-s 指定新建的screen会话执行的shell
-S 新建一个会话,后面跟上会话名称
-d 远程断开一个screen会话

实际使用
使用Xshell连接服务器,进入screen

[root@VM_200_13_centos ~]# screen

在screen窗口执行updatedb模拟执行一个耗时很长的操作
在screen窗口键入Ctrl+a+d模拟中断,Screen会给出detached提示

[detached from 13137.pts-0.VM_200_13_centos]

退出Xshell或重连,再查看所有的screen会话

[root@VM_200_13_centos ~]# screen -ls
There is a screen on:
    13137.pts-0.VM_200_13_centos    (Detached)
1 Socket in /var/run/screen/S-root.

重连之前的screen

[root@VM_200_13_centos ~]# screen -r 1

本文永久更新链接地址http://www.linuxidc.com/Linux/2016-08/134708.htm

linux
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款