Linux进程管理

一,名词解释

1,什么是进程?

进程是已启动的可执行程序的运行实例,进程有以下组成部分:
• 已分配内存的地址空间;
• 安全属性,包括所有权凭据和特权;
• 程序代码的一个或多个执行线程;
• 进程状态。
程序: 二进制文件,静态 /bin/date, /usr/sbin/httpd,/usr/sbin/sshd, /usr/local/nginx/sbin/ngix

进程: 是程序运行的过程, 动态,有生命周期及运行状态。

2,进程的生命周期

 父进程复制自己的地址空间(fork)创建一个新的(子)进程结构。每个新进程分配一个唯一的进程 ID (PID),满足跟踪安全性之需。PID 和 父进程 ID (PPID)是子进程环境的元素,任何进程都可以创建子进程,所有进程都是第一个系统进程的后代:

Centos5/6: init
Centos7: systemd

子进程继承父进程的安全性身份、过去和当前的文件描述符、
端口和资源特权、环境变量,以及程序代码。
随后,子进程可能exec自己的程序代码。

通常,父进程在子进程运行期间处于睡眠(sleeping)状态。
当子进程完成时发出(exit)信号请求,在退出时,
子进程已经关闭或丢弃了其资源环境,剩余的部分称之为僵停(僵尸Zombie)。父进程在子进程退出时收到信号而被唤醒,
清理剩余的结构,然后继续执行其自己的程序代码。

3, 进程状态

在多任务处理操作系统中,每个CPU(或核心)
在一个时间点上只能处理一个进程。
在进程运行时,它对CPU 时间和资源分配的要求会不断变化,
从而为进程分配一个状态,它随着环境要求而改变。


二,查看进程 process

1,目标

了解如进程的:
• PID,PPID
• 当前的进程状态
• 内存的分配情况
• CPU和已花费的实际时间
• 用户UID,它决定进程的特权

2,静态查看进程(ps)

2.1  查看进程 ps


[root@tianyun ~]# ps aux | less
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1      0.0         0.6   128096    6708 ?         Ss    16:20    0:01  /usr/lib/systemd/systemd
————————————————————————————
USER: 运行进程的用户
PID: 进程ID
%CPU: CPU占用率
%MEM: 内存占用率
VSZ: 占用虚拟内存
RSS: 占用实际内存

TTY: 进程运行的终端  (其中tty1-tty7代表本地控制台终端,tty1-tty6是本地字符界面终端,tty7是图形终端。pts/0-255代表虚拟终端。) //可以开启vim 查询到终端名称

STAT: 进程状态 man ps (/STATE)
———————————————————————————
R 运行
S 可中断睡眠 Sleep,(休眠中, 受阻, 在等待某个条件的形成或接受到信号)
D 不可中断睡眠,(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)
T 停止的进程
Z 僵尸进程
X 死掉的进程
————————————————————————————
[了解]
Ss s进程的领导者,父进程
S< <优先级较高的进程
SN N优先级较低的进程
R+ +表示是前台的进程组
Sl 以线程的方式运行
————————————————————————————
START: 进程的启动时间  //可以开启vim ,在用date验证。
TIME: 进程占用CPU的总时间

COMMAND: 进程文件,进程名

示例1:进程的排序
1 以CPU占比降序排列
[root@tianyun ~]# ps aux --sort %cpu |less      //--sort排序,升序
2 以CPU占比升序排列
[root@tianyun ~]# ps aux --sort -%cpu |less     //-%CPU降序
3 以驻留内存升序排列
[root@tianyun ~]# ps aux --sort rss |less
4 以驻留内存降序排列
[root@tianyun ~]# ps aux --sort -rss |less

示例2:进程的父子关系
安装一个进程观察,父子进程以及状态。父亲Ss 和  儿子S
[alice@tianyun ~]$ sudo yum -y install httpd    //安装网站程序。
[alice@tianyun ~]$ sudo systemctl start httpd   //启动网站
[alice@tianyun ~]$ sudo systemctl stop firewalld  //关闭防火墙
[root@tianyun ~]# ps auxf |grep httpd //查看网站程序。
root 9279 0.0 0.0 4264 672 pts/1 S+ 14:37 0:00 \_ grep httpd
root 8310 0.0 0.1 10092 2912 ? Ss 14:19 0:00 /usr/sbin/httpd
apache 8311 0.0 0.0 10092 2060 ? S 14:19 0:00 \_ /usr/sbin/httpd
apache 8312 0.0 0.0 10092 2060 ? S 14:19 0:00 \_ /usr/sbin/httpd
apache 8313 0.0 0.0 10092 2060 ? S 14:19 0:00 \_ /usr/sbin/httpd
apache 8314 0.0 0.0 10092 2060 ? S 14:19 0:00 \_ /usr/sbin/httpd
apache 8315 0.0 0.0 10092 2060 ? S 14:19 0:00 \_ /usr/sbin/httpd
apache 8316 0.0 0.0 10092 2060 ? S 14:19 0:00 \_ /usr/sbin/httpd
apache 8318 0.0 0.0 10092 2060 ? S 14:19 0:00 \_ /usr/sbin/httpd
apache 8319 0.0 0.0 10092 2060 ? S 14:19 0:00 \_ /usr/sbin/httpd


查看进程的父子关系。 请观察PID和PPID
[root@xulei ~]# ps -ef
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 1月22 ?       00:00:07 /usr/lib/systemd/systemd
root          2      0  0 1月22 ?       00:00:00 [kthreadd]
root          3      2  0 1月22 ?       00:00:06 [ksoftirqd/0]

示例3:自定义显示字段
//自定义显示字段 --------------------------------
[root@tianyun ~]# ps axo user,pid,ppid,%mem,command   //xo指定列显示
[root@tianyun ~]# ps axo user,pid,ppid,%mem,command |grep httpd
root 8310 1 0.1 /usr/sbin/httpd
apache 8311 8310 0.0 /usr/sbin/httpd
apache 8312 8310 0.0 /usr/sbin/httpd
apache 8313 8310 0.0 /usr/sbin/httpd
apache 8314 8310 0.0 /usr/sbin/httpd
apache 8315 8310 0.0 /usr/sbin/httpd
apache 8316 8310 0.0 /usr/sbin/httpd
apache 8318 8310 0.0 /usr/sbin/httpd
apache 8319 8310 0.0 /usr/sbin/httpd
root 9236 6798 0.0 grep httpd
-----------------------------------------------------------
[root@tianyun ~]# ps axo user,pid,ppid,%mem,%cpu,command --sort -%cpu |less    //针对某些程序,显示某些列,再进行排序。简洁明了

2.2 查看进程PID的四种方法

//查看指定进程的PID,四种方法————————
第一种。cat
[root@localhost ~]$ cat /run/sshd.pid
830

第二种。ps
[root@localhost ~]# ps aux |grep sshd
root 10180 0.0 0.0 7224 1024 ? Ss 16:00 0:00 /usr/sbin/sshd
第三种。pgrep

[root@localhost ~]# pgrep -l sshd
10180 sshd
[root@localhost ~]# pgrep sshd
10180

第四种。pidof
[root@localhost ~]# pidof sshd
10180

2.3 查看进程树

3,动态查看进程(top)

3.1 上半部分

 
第一部分:系统整体统计信息
top - 11:45:08 up 18:54,  4 users,  load average: 0.05, 0.05, 0.05
Tasks: 176 total,   1 running, 175 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.3 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  3865520 total,  1100000 free,   580268 used,  2185252 buff/cache
KiB Swap:  4063228 total,  4063228 free,        0 used.  2917828 avail Mem
负载加权值解释:—小于1正常————————————
load average: 0.86, 0.56, 0.78 系统最近 1分钟,5分钟,15分钟平均负载

第一行是任务队列:

 当前时间
系统运行时间,格式为时:分
当前登录用户数
系统负载,即任务队列的平均长度。三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。

第二、三行为进程和CPU的信息:

total 进程总数
running 正在运行的进程数
sleeping 睡眠的进程数
stopped 停止的进程数
zombie 僵尸进程数
Cpu(s):
 us 用户空间占用CPU百分比
 sy 内核空间占用CPU百分比
 ni 用户进程空间内改变过优先级的进程占用CPU百分比
 id 空闲CPU百分比
 wa 等待输入输出的CPU时间百分比
hi:硬件CPU中断占用百分比
si:软中断占用百分比
st:虚拟机占用百分比

第四和第五行是内存信息:

Mem:
KiB Mem代表物理内存,KiB Swap代表交换空间,它们的单位都是KiB。
total、used和free没什么好介绍的,就是总共多少,然后用了多少,还剩多少。
buff/cached代表了buff和cache总共用了多少,buff一般都比较小,跟cache比可以忽略不计;cache代表是用来缓存磁盘上文件内容的,所以占有空间很大,Linux一般会尽可能多的将空闲物理内存用于 cache。

Swap:
total    交换区总量
 used    使用的交换区总量
 free    空闲交换区总量
avail Mem表示可用于进程下一次分配的物理内存数量,这个大小一般比free大一点,因为除了free的空间外,系统还能立即释放出一些空间来。

其中可以观察buffers的一个小实验:

做个小实验,观察缓存的作用。
time cp -rf /etc /tmp/etc1
time cp -rf /etc /tmp/etc1
注意观察两次复制的时间,大大缩小,是因第二次的数据已经到了buffer了。
在top的buffer/cache会有体现。


3.2 下半部分

   3.2.1字段的介绍:

 PID,USER,%CPU,%MEM(上面已经解释)

VIRT:virtual memory usage 虚拟内存

1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等

2、假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而不是实际的使用量   

3、需要这些内存,但并没有占满

RES:resident memory usage 常驻内存

1、进程当前使用的内存大小

2、包含其他进程的共享

3、如果申请100m的内存,实际使用10m,它只增长10m,与VIRT相反

SHR:shared memory 共享内存

1、除了自身进程的共享内存,也包括其他进程的共享内存

2、计算某个进程所占的物理内存大小公式: RES-SHR

    3.2.2常用指令:

命令
h|?帮助
M 按内存的使用排序
P 按CPU使用排序
N 以PID的大小排序
R 对排序进行反转
f 自定义显示字段
1 显示所有CPU的负载
< 向前
> 向后
z 彩色,Z设置彩色,使用数字调整
W 保存top环境设置

3.3 top使用技巧

动态查看进程 top,像windows的任务管理器
[root@tianyun ~]# top          //回车,立刻刷新。按z彩色显示,按F,通过光标设置列的顺序。
[root@localhost ~]# top -d 1   //每1秒刷新。
[root@localhost ~]# top -d 1 -p 10126 查看指定进程的动态信息
[root@localhost ~]# top -d 1 -p 10126,1    查看10126和1号进程
[root@localhost ~]# top -d 1 -u apache 查看指定用户的进程
[root@localhost ~]# top -d 1 -b -n 2 > top.txt //-b附加参数,只看2次top信息后写入到文件
[root@localhost ~]#vim  top.txt     //最后打开文件详细阅读

3.4 top的交互命令(了解)

Ctrl+L 擦除并且重写屏幕。
h或者? 显示帮助画面,给出一些简短的命令总结说明。
k       终止一个进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什么样的信号。一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽。
i 忽略闲置和僵死进程。这是一个开关式命令。
q 退出程序。
r 重新安排一个进程的优先级别。系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值。输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权。默认值是10。
S 切换到累计模式。
s 改变两次刷新之间的延迟时间。系统将提示用户输入新的时间,单位为s。如果有小数,就换算成m s。输入0值则系统将不断刷新,默认值是5 s。需要注意的是如果设置太小的时间,很可能会引起不断刷新,从而根本来不及看清显示的情况,而且系统负载也会大大增加。
f或者F 从当前显示中添加或者删除项目。
o或者O 改变显示项目的顺序。
l 切换显示平均负载和启动时间信息。
m 切换显示内存信息。
t 切换显示进程和CPU状态信息。
c 切换显示命令名称和完整命令行。
M 根据驻留内存大小进行排序。
P 根据CPU使用百分比大小进行排序。
T 根据时间/累计时间进行排序。
W 将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法。

3,使用信号控制进程

3.1 信号的种类(kill)


给进程发送信号
[root@tianyun ~]# kill -l //列出所有支持的信号,后面跟进程ID,即可对进程控制
编号 信号名
1) SIGHUP 重新加载配置(平滑的重启
2) SIGINT 键盘中断Ctrl+C
3) SIGQUIT 键盘退出Ctrl+\,类似SIGINT
9) SIGKILL 强制终止,无条件
15) SIGTERM 终止(正常结束),缺省信号
18) SIGCONT 继续
19) SIGSTOP 停止,该进程还未结束, 只是暂停执行
20)SIGTSTP 暂停Ctrl+Z
重点1,9,15。请注意1和15的区别

3.2 各种命令用法(除了上面的kill,还有killall,pkill,top)

 killall [选项][信号] 进程名     //按照进程名杀死进程

   选项:   -i :交互式,询问是否要杀死某个进程

                -I :忽略进程名的大小写

pkill [选项][信号] 进程名    // 按照进程名终止进程

    选项:    -t 终端号:按照终端号踢出用户

如果不知道哪些终端登陆了本机,可以使用w命令

如下:w代表的是自己。

  

top也可以杀死进程,top本身是查看进程的,可以top查看进程时通过交互的形式杀死进程。

以下是针对以上的几个命令列举的示例:

示例1:给vsftpd进程发送信号1,15(重新加载配置,再停止。)

1  安装文件服务器并启动。
[root@localhost ~]# yum install -y vsftpd
[root@localhost ~]# systemctl start vsftpd
[root@localhost ~]# systemctl stop firewalld

2 查询文件服务器进程。
[root@localhost ~]# ps aux |grep vsftpd
root 9160 0.0 0.0 52580 904 ? Ss 21:54 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
注意观察进程PID

3 重启进程。观察进程ID未变
[root@localhost ~]# kill -1 9160 //发送重启信号**************
例如vsftpd的配置文件发生改变,希望重新加载
root 9160 0.0 0.0 52580 904 ? Ss 21:54 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

4 发送停止信号。搜索不到进程了。
[root@localhost ~]# kill 9160 //发送停止信号****************
vsftpd服务有停止的脚本 systemctl stop vsftpd
[root@localhost ~]# ps aux |grep vsftpd

示例2:对任务计划进程(crond)发送1和15信号。
//1
[root@localhost ~]$ ps aux |grep crond
root 478 0.0 0.1 124144 1572 ? Ss 09:35 0:00 /usr/sbin/crond -n
[root@localhost ~]$ kill -1 478
[root@localhost ~]$ ps aux |grep crond
root 478 0.0 0.1 124144 1572 ? Ss 09:35 0:00 /usr/sbin/crond -n

//15
[root@localhost ~]$  kill 478
[root@localhost ~]$ ps aux |grep crond
[root@localhost ~]$  systemctl start crond
[root@localhost ~]$ ps aux |grep crond
root 22319 0.0 0.1 124140 1548 ? Ss 14:54 0:00 /usr/sbin/crond -n

示例3:信号测试9,15

1 创建2个文件,查看终端号。
[root@tianyun ~]# touch file1 file2
[root@tianyun ~]# tty
/dev/pts/1

2 通过一个终端,打开一个vim
[root@tianyun ~]# vim file1

3 通过另一个终端,打开一个vim
[root@tianyun ~]# tty
/dev/pts/2
[root@tianyun ~]# vim file2

3 通过另一个终端,查询两个进程。
[root@tianyun ~]# ps aux |grep vim
root 4362 0.0 0.2 11104 2888 pts/1 S+ 23:02 0:00 vim file1
root 4363 0.1 0.2 11068 2948 pts/2 S+ 23:02 0:00 vim file2

4 发送信号15 和信号9 ,观察两个终端程序状态。
[root@tianyun ~]# kill 4362
[root@tianyun ~]# kill -9 4363
观察两个终端,一个正常终止,一个非法杀死。
——————————————————————————————
5 重复第1-3步,使用killall  杀死所有vim进程。
[root@tianyun ~]# killall vim //给所有vim进程发送信号
[root@tianyun ~]# killall httpd

建议尽量不要使用kill -9

示例4:信号测试18继续,19暂停

1 查询远程登录程序SSH的进程号(使用不同终端登陆服务器)
[root@localhost ~]# ps aux |grep sshd
root 5571 0.0 0.0 64064 1164 ? Ss 09:35 0:00 /usr/sbin/sshd

2 发送暂停信号,并查询状态Ts
[root@localhost ~]# kill -STOP 5571        //等同于-19
[root@localhost ~]# ps aux |grep sshd
root 5571 0.0 0.0 64064 1164 ? Ts 09:35 0:00 /usr/sbin/sshd
看到状态为Ts不再接受处理。T停止状态

3 发送继续信号,查看状态,发现终端可以继续运行。
[root@localhost ~]# kill -cont 5571        //等同于-18
[root@localhost ~]# ps aux |grep sshd
root 5571 0.0 0.0 64064 1164 ? Ss 09:35 0:00 /usr/sbin/sshd
又继续运行了。cont 就S 状态了。

示例5:演示信号18和19计划任务

1 查看计划任务程序crond

[root@localhost ~]$ ps aux |grep crond
root 22319 0.0 0.1 124140 1568 ? Ss 14:54 0:00 /usr/sbin/crond -n
yang 22427 0.0 0.0 112648 964 pts/2 R+ 15:07 0:00 grep --color=auto crond

2 暂停计划任务程序。
[root@localhost ~]$
[root@localhost ~]$ sudo kill -19 22319
[root@localhost ~]$ ps aux |grep crond
root 22319 0.0 0.1 124140 1568 ? Ts 14:54 0:00 /usr/sbin/crond -n
yang 22431 0.0 0.0 112648 964 pts/2 R+ 15:07 0:00 grep --color=auto crond

3 继续计划任务程序。观察状态
[root@localhost ~]$
[root@localhost ~]$ sudo kill -cont 22319
[root@localhost ~]$ ps aux |grep crond
root 22319 0.0 0.1 124140 1568 ? Ss 14:54 0:00 /usr/sbin/crond -n
yang 22436 0.0 0.0 112648 960 pts/2 R+ 15:08 0:00 grep --color=auto crond
总结:kill带ID,killall带程序名称
kill (PID or Job ID)  killall (name)

示例6:踢出一个从远程登录到本机的用户(杀死一个用户)

1 查看pkill命令
[root@tianyun ~]# pkill --help
大家多看帮助,翻译可以借助软件。

2 请使用一个普通用户登录系统。杀掉一个连接用户。
ssh alice@192.168.100.10
[root@tianyun ~]# pkill -u alice
杀掉了用户。

示例7:杀死一个终端

1 查询当前用户。发现多人用同一个账号登录系统。在其中一个普通账户上开启一个sleep程序。
[root@localhost ~]# w
 06:48:38 up 4 min,  4 users,  load average: 0.07, 0.14, 0.08
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    192.168.100.254  06:44    3:58   0.05s  0.05s -bash
root     pts/1    192.168.100.254  06:44    6.00s  0.04s  0.00s w
aofa     pts/2    192.168.100.254  06:44    6.00s  0.03s  0.00s sleep 3000

2 杀掉用户有个问题,多人用同一个用户。可以用终端pkill掉
[root@localhost ~]# pkill -t pts/2 //终止pts/2上所有进程

3 回到pts/2终端观察进程状态。
[aofa@localhost ~]$ sleep 3000
已终止

4 第三步杀死的只是终端上的程序。要想杀死该用户的终端,使用-9
[root@localhost ~]# pkill -9  -t pts/2
//终止pts/2上所有进程 并结束该pts/2

5 观察用户登录情况。少了aofa用户。
[root@localhost ~]# w
 06:51:30 up 7 min,  3 users,  load average: 0.07, 0.10, 0.06
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    192.168.100.254  06:44    6:50   0.05s  0.05s -bash
root     pts/1    192.168.100.254  06:44    2.00s  0.05s  0.01s w


示例8:top杀死一个进程

top也可杀死进程
1 请使用一个终端,开启一个进程。
[aofa@localhost ~]$ sleep 10000

2 在另一个终端查询并杀死该进程。
[root@localhost ~]# ps aux | grep sleep
root       2004  0.0  0.0 107896   604 ?        S    06:51   0:00 sleep 60
aofa       2058  0.0  0.0 107896   604 pts/2    S+   06:52   0:00 sleep 10000
root       2063  0.0  0.0 112664   972 pts/1    R+   06:52   0:00 grep --color=auto sleep

3 通过top杀死该进程。
[root@localhost ~]# top -d 1 -p 2058
k
9
回车

4,进程优先级nice

4.1 简介

Linux操作系统是一个多用户、多任务的操作系统,Linux系统中通知运行着非常多的进程。但是cup在同一个始时钟周期内只能运行一个指令。进程优先级决定了每个进程处理的先后顺序。进程的调度可以让多个进程在cup上面高速的切换,从而给用户多个进程在同时运行的印象。

4.2 相对优先级nice

4.2.1调度策略

   1,普通策略:sched——other常用调度:TS

   2,高级策略:sched——fifo先进先出:FS

4.2.2普通的调度策略
1,nice值得范围:

nice 值越高: 表示优先级越低,例如+19,该进程容易将CPU 使用量让给其他进程。
nice 值越低: 表示优先级越高,例如-20,该进程更不倾向于让出CPU。

2,nice值和PR(PRI)值   //PR和PRI都是Priority优先级的意思,显示不同跟Centos版本有关。

在top中显示的优先级有两个,PR(PRI)值和nice值
查看进程的nice级别
1. 使用top查看nice级别
NI: 实际nice值
PR(PRI): 将nice级别显示为映射到更大优先级队列,-20映射到0,+19映射到39

4.3 查看进程的nice级别

 使用ps查看nice级别(自定义,显示pid 和comm以及nice值并排序。)
[root@localhost ~]# ps axo pid,command,nice,cls --sort=-nice
cls表示显示策略列。
TS 表示该进程使用的调度策略为SCHED_OTHER
FF表示高级进程first in  first out。

4.4 启动具有不同nice级别的进程

示例:不同的nice值

启动具有不同nice级别的进程
启动进程时,通常会继承父进程的 nice级别,默认为0。观察两个程序的不同nice值。
[root@localhost ~]# nice -n -5 sleep 6000 &
[1] 2220
[root@localhost ~]# nice -n -10 sleep 7000 &
[2] 2229
[root@localhost ~]# ps axo command,pid,nice | grep sleep
sleep 6000                    2220  -5
sleep 7000                    2229 -10
grep --color=auto sleep       2233   0

4.5 更改现有进程的nice级别

1,使用top更改

更改现有进程的nice级别
1 打开一个程序
[root@localhost ~]# sleep 12345 &
[1] 2630

2 查询该进程
[root@localhost ~]# ps aux | grep sleep
root    2630  0.0  0.0 107896   604 pts/0    S    07:29   0:00 sleep 12345

3 使用top更改nice级别
[root@localhost ~]# top -d 1 -p 2630
按r键 //调整进程的优先级(Nice Level) (-20高) ---0--- (19低)
回车 //确认该程序。
-20
回车  //确认修改nice值。

如果直接使用top,使用R调整nice值,先输入PID,再输入nice值即可。

2,使用shell更改

使用shell更改nice级别
1  创建一个睡眠程序。
[root@localhost ~]# sleep 7000 &
[2] 2669

2  修改他的nice值。
[root@localhost ~]# renice -20 2669
2669 (进程 ID) 旧优先级为 0,新优先级为 -20
观察修旧的nice值。

注意:nice [选项] 命令  //可以给新执行的命令直接赋予NI值,但是不能修改已经存在进程的NI值
例如:nice -n -5 service httpd start        

           renice [优先级] PID  //renice命令是修改已经存在进程的NI值得命令
例如:renice -10 2125


三,作业控制 jobs(了解)

3.1 简介

作业控制是一个命令行功能,允许一个shell 实例来运行和管理多个命令。
如果没有作业控制,父进程fork()一个子进程后,将sleeping,直到子进程退出。
使用作业控制,可以选择性暂停,恢复,以及异步运行命令,让 shell 可以在子进程运行期间返回接受其他命令。

关键词介绍
foreground, background, and controlling terminal

foreground: 前台进程:是在终端中运行的命令,该终端为进程的控制终端。前台进程接收键盘产生的输入和信号,并允许从终端读取或写入到终端。
background: 后台进程:没有控制终端,它不需要终端的交互。

3.2 作业控制示例

示例1:前后台调动
[root@tianyun ~]# sleep 2000
运行一个程序,当前终端无法输入。

1  直接运行后台程序。暂停一个前台程序。
[root@tianyun ~]# sleep 3000 & //运行程序(时),让其在后台执行
[root@tianyun ~]# sleep 4000 //^Z,将前台的程序挂起(暂停)到后台
[2]+ Stopped sleep 4000

2 查询所有程序。注意一个是后台运行S,一个后台暂停T。
[root@tianyun ~]# ps aux |grep sleep
root 8895 0.0 0.0 100900 556 pts/0 S 12:13 0:00 sleep 3000
root 8896 0.0 0.0 100900 556 pts/0 T 12:13 0:00 sleep 4000


3 只查看后台进程。
[root@tianyun ~]# jobs //查看后台作业
[1]- Running sleep 3000 &
[2]+ Stopped sleep 4000
4 执行暂停程序,和调动后台程序至前台。
[root@tianyun ~]# bg 2 //让作业2在后台,从暂停到运行
[root@tianyun ~]# fg  1 //将作业1调回到前台

[root@tianyun ~]# kill  %1 //kill %1,结束后台作业1.
注意,kill 1   和   kill   %1  不同,前者终止PID为1的进程,后者杀死作业。

示例2:如何管理远程主机

[root@tianyun ~]# ssh 172.16.50.240
[root@www ~]# yum -y install screen
[root@www ~]# screen -S install_apache //-S启动会话的名字
sleep 9000

==断网后,重新连接==
[root@www ~]# screen -list
There are screens on:
28958.install_nginx (Detached)
29013.install_apache (Detached)
2 Sockets in /var/run/screen/S-root.

[root@www ~]# screen -r 29013

示例3:(了解)

&符号在程序的末尾才是后台运行,请看下面的例子,命令中的&并不是后台运行的意思。

while :; do date; sleep 2; done    //查询时间,间隔两秒。ctrl+C停止。

[root@tianyun ~]# (while :; do date; sleep 2; done) & //进程在后台运行,但输出依然在当前终端(使用fg调到前台,ctrl+C终止。)
[root@tianyun ~]# (while :; do date; sleep 2; done) &>/dev/null &

四,文件系统proc(了解)

4.1 简介

虚拟化文件系统:内存、进程运行的状态信息

4.2 cup

/proc/cpuinfo
[root@tianyun ~]# grep 'processor' /proc/cpuinfo //逻辑cpu的个数
processor : 0
processor : 1
[root@tianyun ~]# grep 'physical id' /proc/cpuinfo //物理cpu的个数
physical id : 0
physical id : 0
==flags
lm(64位)---------------------------------
vmx 支持虚拟化 Intel----------------------
svm 支持虚拟化 AMD-------------------------

[root@tianyun ~]# egrep 'lm|vmx|svm' /proc/cpuinfo
flags : fpu vme de clflush dts acpi lm constant_tsc pni monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr lahf_lm
flags : fpu vme de clflush dts acpi lm constant_tsc pni monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr lahf_lm

[root@tianyun ~]# lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
CPU(s): 4
On-line CPU(s) list: 0-3
Thread(s) per core: 2
Core(s) per socket: 2
Socket(s): 1
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 3072K
NUMA node0 CPU(s): 0-3

4.3 内存

/proc/meminfo
[root@tianyun ~]# less /proc/meminfo
[root@tianyun ~]# free -m
total used free shared buff/cache available
Mem: 7950 704 6540 100 705 6908
Swap: 2047 0 2047

4.4 内核

/proc/cmdline //内核启动参数
[root@tianyun ~]# cat /proc/cmdline
BOOT_IMAGE=/vmlinuz-3.10.0-327.el7.x86_64 root=UUID=9b17ab4e-cd93-4f84-bd1e-7241a0baac9b ro rhgb quiet LANG=zh_CN.UTF-8

4.5 使用率

uptime
[root@tianyun ~]# uptime
17:20:58 up 8:33, 3 users, load average: 0.43, 0.36, 0.36

4.6 网络

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







  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值