解释Linux进程的父子关系,Linux进程管理

一,名词解释

1,什么是进程?

进程是已启动的可执行程序的运行实例,进程有以下组成部分:

• 已分配内存的地址空间;

• 安全属性,包括所有权凭据和特权;

• 程序代码的一个或多个执行线程;

• 进程状态。

程序: 二进制文件,静态 /bin/date, /usr/sbin/httpd,/usr/sbin/sshd, /usr/local/nginx/sbin/ngix

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

解释Linux进程的父子关系,Linux进程管理_第1张图片

2,进程的生命周期

解释Linux进程的父子关系,Linux进程管理_第2张图片

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

Centos5/6: init

Centos7: systemd

子进程继承父进程的安全性身份、过去和当前的文件描述符、

端口和资源特权、环境变量,以及程序代码。

随后,子进程可能exec自己的程序代码。

通常,父进程在子进程运行期间处于睡眠(sleeping)状态。

当子进程完成时发出(exit)信号请求,在退出时,

子进程已经关闭或丢弃了其资源环境,剩余的部分称之为僵停(僵尸Zombie)。父进程在子进程退出时收到信号而被唤醒,

清理剩余的结构,然后继续执行其自己的程序代码。

3, 进程状态

在多任务处理操作系统中,每个CPU(或核心)

在一个时间点上只能处理一个进程。

在进程运行时,它对CPU 时间和资源分配的要求会不断变化,

从而为进程分配一个状态,它随着环境要求而改变。

解释Linux进程的父子关系,Linux进程管理_第3张图片

解释Linux进程的父子关系,Linux进程管理_第4张图片

二,查看进程 process

1,目标了解如进程的:

• PID,PPID

• 当前的进程状态

• 内存的分配情况

• CPU和已花费的实际时间

• 用户UID,它决定进程的特权

2,静态查看进程(ps)

2.1  查看进程 ps

解释Linux进程的父子关系,Linux进程管理_第5张图片[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 查看进程树

解释Linux进程的父子关系,Linux进程管理_第6张图片

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会有体现。

解释Linux进程的父子关系,Linux进程管理_第7张图片

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)

解释Linux进程的父子关系,Linux进程管理_第8张图片

给进程发送信号

[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代表的是自己。

解释Linux进程的父子关系,Linux进程管理_第9张图片

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,151 创建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 [email protected]

[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值得范围:

d2573d331b2611fca11a39f0ecb46bcd.png

解释Linux进程的父子关系,Linux进程管理_第10张图片

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 startrenice [优先级] 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

你可能感兴趣的:(解释Linux进程的父子关系)