Linux进程的管理

  • 进程的概述和ps查看工具
  • uptime和top命令的使用方法
  • nice和screen命令的使用方法

进程的概述和ps查看工具

1、进程的概述
进程是已启动的可执行程序的运行实例,进程有以下组成部分;

  • 已分配内存的地址空间
  • 安全属性,包括所有权凭据和特权
  • 程序代码的一个或多个执行线程
  • 进程状态
    程序:二进制文件,静态/bin/date,/usr/sbin/sshd
    进程:是程序的运行过程,动态,有生命周期及运行状态
    生命周期:父进程复制自己的地址空间创建一个新的子进程结构,每个新进程分配一个唯一的进程ID(PID),满足跟踪安全性之需。PID和父进程ID(PPID)是子进程环境的元素,任何进程都可以创建子进程,所有进程都是第一个系统进程的后代。
    centos5或6 PID为1的进程:init
    centos7 PID为1的进程:systemd
    僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然存在系统中,这种进程称之为僵尸进程。

2、进程的属性
进程ID(PID):是唯一的数值,用来区分进程
父进程的ID:PPID
启动进程的用户ID:UID
启动进程的所属组ID:GID
进程状态:运行R、休眠S、僵尸Z
进程执行的优先级
进程所连接的终端名
进程资源占用:(内存、CPU占用量)

3、ps查看工具
ps是静态查看进程的工具
参数:

  • a:显示当前终端关联的所有进程
  • u:基于用户的格式显示
  • x:显示所有进行,不以终端机来区分
  • e:显示所有进程,和f组合使用
  • f:显示完成格式输出,和e组合使用

例1:使用ps -aux查看系统进程

[root@xuegod110 ~]# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.2 191188 4216 ? Ss 12:35 0:03 /usr/lib/systemd/systemd --switched-root --system --deseria
root 2 0.0 0.0 0 0 ? S 12:35 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 12:35 0:00 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< 12:35 0:00 [kworker/0:0H]
root 7 0.0 0.0 0 0 ? S 12:35 0:00 [migration/0]

注:最后一列[xxx]使用方括号括起来的进程显示的内核态的进程,没有括起来的是用户态进程

查看每列的显示说明:

  • user:启动进程的用户
  • PID:进程ID
  • %CPU:进程占用CPU的百分比
  • %MEN:进程占用内存的百分比
  • VSZ:虚拟内存占用的大小
  • RSS:物理内存占用的大小
  • TTY:进程使用那个终端
  • STAT:目前进程的状态
  • START:该进程被触发的时间
  • TIME:进程实际使用CPU的时间
  • COMMAND:进程的实际指令

进程状态说明:

  • R:进程目前是运作,或者可被运作
  • S:进程目前是随眠,可被某些信号唤醒
  • T:进程目前停止或被侦测
  • Z:进程已终止,父进程无法终止,僵尸进程
  • D:不可终端状态
  • <:进程运行在高优先级上
  • N:进程运行在低优先级上
  • L:进程有页面锁定在内存中
  • s:进程是控制进程
  • l:进程是多线程的
  • +:进程运行在前台

例2:使用vim编辑文件,然后停止,查看状态

[root@xuegod110 ~]# vim a.txt #不关闭vim,在另一个终端查询进程状态
[root@xuegod110 ~]# ps -aux | grep vim #S+:进程在前台运行,睡眠
root 6744 0.7 0.2 151792 5352 pts/2 S+ 17:15 0:00 vim a.txt
root 6746 0.0 0.0 112720 972 pts/1 S+ 17:15 0:00 grep --color=auto vim
[root@xuegod110 ~]# vim a.txt #按下“ctrl+z”,停止vim
[1]+ 已停止 vim a.txt
[root@xuegod110 ~]# ps -aux | grep vim #T:进程已停止
root 6744 0.0 0.2 151792 5352 pts/2 T 17:15 0:00 vim a.txt
root 6765 0.0 0.0 112720 972 pts/1 S+ 17:17 0:00 grep --color=auto vim

例3:打包/usr目录,查看不可终端状态

[root@xuegod110 ~]# tar cvf usr.tar /usr #打包usr目录
[root@xuegod110 ~]# ps -aux | grep tar #S+:前台运行,休眠状态
root 6836 43.8 0.0 124144 1812 pts/2 S+ 17:21 0:09 tar cvf usr.tar /usr
root 6885 0.0 0.0 112724 972 pts/1 S+ 17:21 0:00 grep --color=auto tar
[root@xuegod110 ~]# ps -aux | grep tar #R+:前台运行,运作状态
root 6783 64.5 0.0 123836 1584 pts/2 R+ 17:18 0:06 tar cvf usr.tar /usr
root 6790 0.0 0.0 112724 972 pts/1 S+ 17:19 0:00 grep --color=auto tar
[root@xuegod110 ~]# ps -aux | grep tar #D+:前台运行,不可终端
root 6783 61.2 0.0 123804 1588 pts/2 D+ 17:18 0:06 tar cvf usr.tar /usr
root 6792 0.0 0.0 112724 972 pts/1 S+ 17:19 0:00 grep --color=auto tar

例4:通过sort和ps命令,查看当前CPU占用量最高的进程

[root@xuegod110 ~]# ps -aux | sort -nrk3 | more
root 6783 0.8 0.0 124144 1784 pts/2 T 17:18 0:16 tar cvf usr.tar /usr
root 6836 0.7 0.0 124144 1840 pts/2 T 17:21 0:13 tar cvf usr.tar /usr
root 6899 0.4 0.0 124144 1816 pts/2 T 17:23 0:08 tar cvf usr.tar /usr
root 5912 0.3 0.2 163484 6064 ? Ss 16:33 0:17 sshd: root@pts/2
root 2500 0.3 7.4 3482300 151276 ? Sl 13:30 0:53 /usr/bin/gnome-shell
root 728 0.2 0.3 320252 6284 ? Ssl 12:35 0:41 /usr/bin/vmtoolsd

uptime、top、watch、wc、、lsof、pstree、nohup命令

1、uptime命令查看CPU负载
uptime命令是静态查看cpu负载的命令

[root@xuegod110 ~]# uptime
17:25:38 up 4:50, 3 users, load average: 0.09, 0.26, 0.17

弹出消息说明:

  • 17:25:38:系统当前时间
  • up 4:50:系统运行了4小时50分钟
  • 3 users:三个用户连接(系统本身一个,两个虚拟终端)
  • load average: 0.09, 0.26, 0.17:系统负载,任务队列平均长度,三个数值分别表示1分钟、5分钟、15分钟的一个平均值。

这里给出一个经验值,可以进行参考和对比。
如果服务器的核心是1核,则load average值≥3,CPU负载过高;
如果服务器的核心是4核,则load average值≥12,CPU负载过高;

2、top命令
top命令是动态查看进程命令
快捷键:默认每3s刷新一次,s键修改刷新时间

  • q:退出
  • 1:查看CPU的动态使用率
  • P:按照CPU使用率排序
  • M:按照内存使用率排序
  • T:按照时间使用排序
  • u/U:指定显示的用户,手动输入用户,可以只显示输入用户
  • h:帮助
    以上快捷键是在top命令执行后,直接按下对应字母就可以执行的
  • p:查看指定PID的进程状态
  • R:调整优先级

3、watch命令
以周期性的方式执行给定的指令,指令输出以全屏方式显示。

  • d:高亮显示指令输出信息不同之处
  • n:设置间隔的刷新时间
  • t:不显示标题

[root@xuegod140 ~]# watch -d uptime #默认2秒钟刷新一次数据
在这里插入图片描述[root@xuegod140 ~]# watch -d -n 5 uptime #设置间隔时间为5秒刷新一次
在这里插入图片描述
[root@xuegod140 ~]# watch -t uptime
在这里插入图片描述

4、wc命令
用来计算数字。利用wc指令我们可以计算文件的Byte数、字数或是列数,若不指定文件名称,或是所给予的文件名为“-”,则wc指令会从标准输入设备读取数据。

  • l或–list:只显示列数
  • c或–bytes或–chars:只显示bytes数 一个字符就是1byte,如果是汉字,则是2byte
  • w或–words:只显示字数

[root@xuegod140 ~]# cat /etc/passwd | wc -l #passwd总计46行
46
[root@xuegod140 ~]# cat /etc/passwd | wc -c #passwd总计bytes数2366
2366
[root@xuegod140 ~]# cat /etc/passwd | wc -w #字数是87
87

5、lsot命令
查看进程打开的文件,打开文件的进程,进程打开的端口(tcp/udp)

  • i:列出符合条件的进程
  • p/c:列出制定进程打开的文件
  • 不加参数,直接后面跟上文件或目录,可以查看那个用户或进程在占用

[root@xuegod110 ~]# ps -axu | grep vim
root 7529 0.1 0.2 151888 5440 pts/2 S+ 18:19 0:00 vim a.txt
root 7532 0.0 0.0 112720 968 pts/1 S+ 18:19 0:00 grep --color=auto vim
[root@xuegod110 ~]# lsof -i:22
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 1026 root 3u IPv4 22228 0t0 TCP *:ssh (LISTEN)
sshd 1026 root 4u IPv6 22230 0t0 TCP *:ssh (LISTEN)
sshd 5912 root 3u IPv4 66533 0t0 TCP xuegod110.com:ssh->192.168.0.107:52845 (ESTABLISHED)
sshd 6653 root 3u IPv4 76047 0t0 TCP xuegod110.com:ssh->192.168.0.107:53376 (ESTABLISHED)
[root@xuegod110 ~]# lsof -p 7529
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
vim 7529 root cwd DIR 8,3 4096 16797761 /root
vim 7529 root rtd DIR 8,3 236 64 /
vim 7529 root txt REG 8,3 2294256 26495997 /usr/bin/vim
vim 7529 root mem REG 8,3 62184 62036 /usr/lib64/libnss_files-2.17.so
vim 7529 root mem REG 8,3 106070960 17287564 /usr/lib/locale/locale-
[root@xuegod140 etc]# cd /mnt
[root@xuegod140 mnt]# umount /dev/cdrom /mnt
umount: /mnt: target is busy.
(In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1))
umount: /mnt: target is busy.
(In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1))
[root@xuegod140 mnt]# lsof /mnt #可以查看是那个用户或进程占用了当前文件或目录
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 1365 root cwd DIR 11,0 2048 1856 /mnt
lsof 2146 root cwd DIR 11,0 2048 1856 /mnt
lsof 2147 root cwd DIR 11,0 2048 1856 /mnt

6、pstree命令
以树状图显示所有进程,只显示进程名字,且相同进程合并显示
-p参数:显示进程ID,并展开显示所有进程

[root@xuegod110 ~]# pstree | more
systemd-±ModemManager—2*[{ModemManager}]
|-NetworkManager—2*[{NetworkManager}]
|-VGAuthService
|-2*[abrt-watch-log]
|-abrtd
|-accounts-daemon—2*[{accounts-daemon}]
|-alsactl
|-at-spi-bus-laun-±dbus-daemon
| -3*[{at-spi-bus-laun}] |-at-spi2-registr---2*[{at-spi2-registr}] |-atd |-auditd-+-audispd-+-sedispatch | |-{audispd}
[root@xuegod110 ~]# pstree -p | more
systemd(1)-±ModemManager(682)-±{ModemManager}(695)
| -{ModemManager}(756) |-NetworkManager(760)-+-{NetworkManager}(790) |-{NetworkManager}(796)
|-VGAuthService(727)
|-abrt-watch-log(689)
|-abrt-watch-log(692)
|-abrtd(687)
|-accounts-daemon(705)-±{accounts-daemon}(719)
| `-{accounts-daemon}(755)

7、nohup命令
将程序以忽略挂起信号的方式运行起来,被运行的程序的输出信息将不会显示到终端(挂起到后台运行)
无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。如果当前目录的 nohup.out 文件不可写,输出重定向到$HOME/nohup.out文件中。如果没有文件能创建或打开以用于追加,那么 command 参数指定的命令不可调用。如果标准错误是一个终端,那么把指定的命令写给标准错误的所有输出作为标准输出重定向到相同的文件描述符。

[root@xuegod140 ~]# nohup ping -c20 baidu.com
nohup: ignoring input and appending output to ‘nohup.out’
[root@xuegod140 ~]# ps -aux | grep ping #后台运行
root 9465 0.0 0.0 149932 1980 pts/1 S+ 22:56 0:00 ping -c20 baidu.com
root 9467 0.0 0.0 112708 964 pts/0 S+ 22:56 0:00 grep --color=auto ping
[root@xuegod140 ~]# ps -aux | grep ping #20个包ping完,自动结束进程
root 9467 0.0 0.0 112708 964 pts/0 S+ 22:56 0:00 grep --color=auto ping

例1:使用top命令,查看指定进程的状态

[root@xuegod110 ~]# vim a.txt
[root@xuegod110 ~]# ps -aux | grep vim
root 7082 0.2 0.2 151888 5444 pts/2 S+ 17:44 0:00 vim a.txt
root 7194 0.0 0.0 112720 972 pts/1 S+ 17:44 0:00 grep --color=auto vim
[root@xuegod110 ~]# top -p 7082
在这里插入图片描述

top命令界面详细介绍:
第一行内容和uptime内容一样;
第二、三行是进程和CPU信息:

  • Tasks:1 total: 进程总数
  • 0 running:运行进程的数量
  • 1sleeping:睡眠进程的数量
  • 0 stopped:停止进程的数量
  • 0 zombie:僵尸进程的数量
  • %CPU(s):0.0us:系统用户使用CPU的百分比
  • 0.0 sy:内核用户使用cpu的百分比
  • 0.0 ni:改变过优先级用户使用cpu的百分比
  • 100.0 id:空闲CPU的百分比
  • 0.0 wa:cpu等待i/o完成的时间总量,排队时间的总量
  • 0.0 hi:硬终端占用CPU的百分比
  • 0.0 si:软终端占用CPU的百分比
  • 0.0 st:虚拟机偷取物理机的时间。比如虚拟机运行kvm虚拟机,kvm虚拟机占用物理机cpu的时间
    第四、五行内存占用信息:
  • Men:物理内存的总大小
  • free:空闲的物理内存大小
  • used:已使用的物理内存大小
  • buff/cache:用作内存缓存的内存大小
  • Swap:交换分区的总量
  • avail Men:总的可利用的内存量
    第七行:进程信息
  • PID:进程id
  • USER:进程所有者的名字
  • PR:优先级,(内核动态调控),用户不能修改
  • NI:进程优先级,可以使用renice命令调整,值越低优先级越大,反之。
  • VIRI: 虚拟内存
  • RES:物理内存
  • SHR:共享内存大小,单位kb
  • S:进程状态
  • %cpu:上次更新到现在cpu使用百分比
  • %MEN:上次更新到现在内存使用百分比
  • TIME+:进程使用的cpu时间总计,单位1/1000秒
  • COMMAND:命令名/命令行

nice、screen、sript命令

1、前台进程和后台进程
前台进程:是终端中运行的命令,那么该终端就是控制终端,一旦这个终端关闭,这个进程也随之消失
后台进程:也叫守护进程,是运行在后台的一种特殊进程,不受终端控制,它不需要和终端交互
Linux大多数进程都是守护进程,比如web服务器httpd等

2、前台进程与后台进程的运行

  • &: 用在一个命令的最后,可以把这放到台执行 .
  • ctrl ctrl + z:将一个正在前台执行的命令放到后,并且暂停 .
  • jobs:查看当前有多少在后台 运行的进程 .它是一个作业控制命令
  • fg:将后台中的命令调至前继续运行 , 如果后台中有多个命令,可以 如果后台中有多个命令,
  • bg:将一个在后台暂停的命令,变成继续执行 ; 如果后台中有多个命令,可以用 如果后台中有多个命令

恢复被挂起的进程

[root@xuegod110 ~]# vim a.txt
[1]+ 已停止 vim a.txt
[root@xuegod110 ~]# ps -axu | grep vim
root 6744 0.0 0.2 151792 5352 pts/2 T 17:15 0:00 vim a.txt
root 7529 0.0 0.2 151888 5440 pts/2 S+ 18:19 0:00 vim a.txt
root 7694 0.3 0.2 151888 5444 pts/1 T 18:34 0:00 vim a.txt
root 7696 0.0 0.0 112720 972 pts/1 S+ 18:34 0:00 grep --color=auto vim
[root@xuegod110 ~]# jobs
[1]+ 已停止 vim a.txt
[root@xuegod110 ~]# fg 1
vim a.txt
[root@xuegod110 ~]# ll a.txt
-rw-rwxr–+ 1 root root 0 4月 1 18:35 a.txt

3、kill命令
kill killall pkill
kill -l :列出所有信号
常用信号
1) SIGHUP 重新加载配置
2) SIGINT键盘中断 crtl+c
3) SIGQUIT 退出
9) SIGKILL 强制终止
15 ) SIGTERM 终止(正常结束),缺省信号
18 ) SIGCONT 继续
19 ) SIGSTOP 停止
20 ) SIGTSTP 暂停 crtl+z

例:使用kill终止进程

[root@xuegod110 ~]# killall nginx
[root@xuegod110 ~]# pkill sshd
[root@xuegod110 ~]# vim a.txt
[1]+ 已停止 vim a.txt
[root@xuegod110 ~]# ps -aux | grep vim
root 7881 0.5 0.2 151892 5452 pts/1 T 18:49 0:00 vim a.txt
root 7883 0.0 0.0 112720 972 pts/1 S+ 18:49 0:00 grep --color=auto vim
[root@xuegod110 ~]# kill -9 7881
[1]+ 已杀死 vim a.txt

4、进程的优先级管理
优先级的取值范围(-20–19),取值越小,优先级越高,取值越大,优先级越小
命令:nice 指定程序的运行优先级
格式:nice -n commmand
命令2:renice 调整程序运行的优先级
格式:renice -n 优先级值

例:调整vim的优先级为5
默认优先级是0

[root@xuegod110 ~]# ps -aux | grep vim
root 7977 1.6 0.2 151888 5452 pts/2 S+ 18:58 0:00 vim a.txt
root 7979 0.0 0.0 112720 972 pts/1 S+ 18:58 0:00 grep --color=auto vim
[root@xuegod110 ~]# top -p 7977 #vim的NI值是0
top - 18:58:40 up 6:23, 3 users, load average: 0.00, 0.01, 0.05
Tasks: 1 total, 0 running, 1 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.1 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.1 si, 0.0 st
KiB Mem : 2030172 total, 94572 free, 832972 used, 1102628 buff/cache
KiB Swap: 2097148 total, 2096884 free, 264 used. 955068 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
7977 root 20 0 151888 5452 2776 S 0.0 0.3 0:00.05 vim
[root@xuegod110 ~]# renice -n 5 7977 #修改优先级
7977 (进程 ID) 旧优先级为 0,新优先级为 5
[root@xuegod110 ~]# top -p 7977
top - 18:59:22 up 6:24, 3 users, load average: 0.00, 0.01, 0.05
Tasks: 1 total, 0 running, 1 sleeping, 0 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 : 2030172 total, 95060 free, 832472 used, 1102640 buff/cache
KiB Swap: 2097148 total, 2096884 free, 264 used. 955568 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
7977 root 25 5 151888 5452 2776 S 0.0 0.3 0:00.05 vim

5、screen命令
screen命令中有会话的概念,用户可以在一个screen会话中创建多个screen窗口。

  • s:新建一个会话
  • ls:列出当前所有会话
  • r:回到之前挂起的会话
    1)安装screen软件包

[root@xuegod110 ~]# rpm -ivh /mnt/Packages/screen-4.1.0-0.25.20120314git3c2946.el7.x86_64.rpm
准备中… ################################# [100%]
正在升级/安装…
1:screen-4.1.0-0.25.20120314git3c29################################# [100%]

2)直接执行screen命令,打开一个新的screen会话窗口

[root@xuegod110 ~]# screen

在这里插入图片描述
3)在screen会话窗口,和正常tty窗口一样。使用vim编辑文件,之后按下“ctrl+a+
d”键,会分离出来一个独立的会话 这里按下“ctrl+a+d”键后会手动挂到后台,自动关闭终端,也会挂到后台。

[root@xuegod110 ~]# vim a.txt #按下ctrl+a+d,分离会话。
[detached from 8068.pts-1.xuegod110]

4)执行screen -ls命令,查看已经建立的会话ID

[root@xuegod110 ~]# screen -ls
There are screens on:
8068.pts-1.xuegod110 (Detached)
1 Sockets in /var/run/screen/S-root.

5)执行screen -r id号,重新调出vim进行编辑

[root@xuegod110 ~]# screen -r 8068

6)执行screen -s 新建一个会话

[root@xuegod110 ~]# screen -s test

6、script命令
录屏命令,可以录制操作步骤,后续使用命令进行播放,无法录制声音

  • a:追加,将在录屏的过程中的内容追加到某个文件
  • t:将定时输出的错误信息重定向到某一个文件内(时间表)
  • scriptreplay:播放录屏

[root@xuegod140 ~]# script -t 2> a.txt -a b.txt
Script started, file is b.txt
[root@xuegod140 ~]# cd /etc/sysconfig/network-scripts/
[root@xuegod140 network-scripts]# cat ifcfg-ens33
TYPE=“Ethernet”
PROXY_METHOD=“none”
BROWSER_ONLY=“no”
BOOTPROTO=“none”
DEFROUTE=“yes”
IPV4_FAILURE_FATAL=“no”
IPV6INIT=“yes”
IPV6_AUTOCONF=“yes”
IPV6_DEFROUTE=“yes”
IPV6_FAILURE_FATAL=“no”
IPV6_ADDR_GEN_MODE=“stable-privacy”
NAME=“ens33”
UUID=“ef597dc0-39de-4741-b8ae-8d6a60e3ac60”
DEVICE=“ens33”
ONBOOT=“yes”
IPADDR=“192.168.1.140”
PREFIX=“24”
GATEWAY=“192.168.1.1”
DNS1=“8.8.8.8”
IPV6_PRIVACY=“no”
[root@xuegod140 network-scripts]# exit
exit
Script done, file is b.txt
[root@xuegod140 ~]# scriptreplay a.txt b.txt #播放录屏内容

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值