Linux里面ps -eo comm,pcpu命令作用是什么?

Linux作为Unix的衍生操作系统,Linux内建有查看当前进程的工具ps。这个工具能在命令行中使用

查看它的man手册可以看到,ps命令能够给出当前系统中进程的快照。它能捕获系统在某一事件的进程状态。如果你想不断更新查看的这个状态,可以使用top命令。

ps命令支持三种使用的语法格式

我们能够混用这几种风格,但是可能会发生冲突。本文使用 UNIX 风格的ps命令。这里有在日常生活中使用较多的ps命令的例子。
1. 不加参数执行ps命令

这是一个基本的 ps 使用。在控制台中执行这个命令并查看结果。

结果默认会显示4列信息。

这些信息在显示时未排序。
2. 显示所有当前进程

使用 -a 参数。-a 代表 all。同时加上x参数会显示没有控制终端的进程。

这个命令的结果或许会很长。为了便于查看,可以结合less命令和管道来使用。

在需要查看特定用户进程的情况下,我们可以使用 -u 参数。比如我们要查看用户'pungki'的进程,可以通过下面的命令:

也许你希望把结果按照 CPU 或者内存用量来筛选,这样你就找到哪个进程占用了你的资源。要做到这一点,我们可以使用 aux 参数,来显示全面的信息:

默认的结果集是未排好序的。可以通过 --sort命令来排序。

根据 CPU 使用来升序排序

    我们也可以将它们合并到一个命令,并通过管道显示前10个结果:

5. 通过进程名和PID过滤

使用 -C 参数,后面跟你要找的进程的名字。比如想显示一个名为getty的进程的信息,就可以使用下面的命令:

    如果想要看到更多的细节,我们可以使用-f参数来查看格式化的信息列表:

如果我们想知道特定进程的线程,可以使用-L 参数,后面加上特定的PID。

有时候我们希望以树形结构显示进程,可以使用 -axjf 参数。

如果想要查看现在有谁登入了你的服务器。可以使用ps命令加上相关参数:

参数 -e 显示所有进程信息,-o 参数控制输出。Pid,User 和 Args参数显示PID,运行应用的用户和该应用。

系统管理员想要查看由root用户运行的进程和这个进程的其他相关信息时,可以通过下面的命令:

-U 参数按真实用户ID(RUID)筛选进程,它会从用户列表中选择真实用户名或 ID。真实用户即实际创建该进程的用户。

-u 参数用来筛选有效用户ID(EUID)。

这里有上面的命令的输出结果:

10. 使用PS实时监控进程状态

ps 命令会显示你系统当前的进程状态,但是这个结果是静态的。

当有一种情况,我们需要像上面第四点中提到的通过CPU和内存的使用率来筛选进程,并且我们希望结果能够每秒刷新一次。为此,我们可以将ps命令和watch命令结合起来。

    如果输出太长,我们也可以限制它,比如前20条,我们可以使用head命令来做到。

    这里的动态查看并不像top或者htop命令一样。但是使用ps的好处是你能够定义显示的字段,你能够选择你想查看的字段。

举个例子,如果你只需要看名为'pungki'用户的信息,你可以使用下面的命令:

你也许每天都会使用ps命令来监控你的Linux系统。但是事实上,你可以通过ps命令的参数来生成各种你需要的报表。

ps命令的另一个优势是ps是各种 Linux系统都默认安装的,因此你只要用就行了。

不要忘了通过 man ps来查看更多的参数。(LCTT 译注:由于 ps 命令古老而重要,所以它在不同的 UNIX、BSD、Linux 等系统中的参数不尽相同,因此如果你用的不是 Linux 系统,请查阅你的文档了解具体可用的参数。)

}
  1. 内核功用:进程管理、文件系统、网络功能、内存管理、驱动程序、 安全功能等
  2. Process: 运行中的程序的一个副本,是被载入内存的一个指令集合
    进程ID(Process ID,PID)号码被用来标记各个进程
    UID、 GID、和SELinux语境决定对文件系统的存取和访问权限
    一般从执行进程的用户来继承
  1. 进程和不是程序,它是程序加载到内存中以后进行运行的各类指令操做的集合
  2. 程序运行时先将它加载到内核空间内存中,而后再将它分配到用户空间内存中中,此时至关于系统分配给它一个独立的内存空间。这时候它便成为了进程,而且和其余的进程相互隔离。它认为本身独占了整个内存空间(虚拟出来的内存,并不是真实的内存空间),并在此基础上进行操做。实际上它占用的只是系统给它分配的一小块内存空间而已。
  3. 进程运行时会随机分配一个进程编号,运行结束以后会被会被回收。它运行时就至关于一个资源的集合,有本身的独立的内存,能读取数据进去,有本身的二进制执行程序命令,包括不少县城等等。
  4. 进程内部真正执行操做计算的是线程,一个线程就是各类指令的集合。一个进程内至少有一个线程,能够有多个。
  5. 进程的生命周期有长期的(后台进程),有一次性短时间运行的(前台进程)。好比说开机就开始运行的init进程,还有cat ls等程序的进程。
  6. task struct : 一个数据结构,包含了进程的各类元数据。
  7. 建立子进程若是用clone()函数,就会产生CoW(写时复制)方式,相似逻辑卷中的快照:只有子进程中对数据进行修改了,才会从新建立一个不一样的数据存放于子进程中。而数据并未更改时它和父进程指向同一个数据,共用此数据。(最开始学习中的小括号开启子进程,小括号内局部变量若是不赋值,仍然和父进程的变量内容同样就是这个缘由)
  8. 协程就是多个命令的集合代码块(相似函数),多个协程组成一个线程。进程中线程的执行顺序的优先级是由操做系统内核来调度的,而CPU在同一时间只能运行一个线程。咱们人看到进程的执行感受它是同时执行的,其实它只是利用CPU的时间频率分红了多个时间段,而后一个时间段执行一个线程,由内核调度,不管是否完成这个线程,只要时间段一到,它就会切换到另外一个线程进行运行,保存当前线程的状态,这也就是所谓的上下文切换(注意,线程切换能够是不一样进程的线程,也就至关于切换了不一样的进程)。由于CPU频率极快,所以咱们看起来它貌似是同步执行了多个进程。
  9. 上下文切换会形成CPU内的当前线程(或进程)缓存数据(L1,L2,L3)失效,相比于CPU的运算时间,这个代价很是巨大,所以要尽可能避免上下文切换进行优化。
  • Page Frame: 页框,用存储页面数据,存储Page 4k (也就是进程使用的内存空间,相似磁盘的块block)
  • 物理地址空间和线性地址空间:物理上的实际内存和应用程序使用时认为的虚拟内存(至关于偏移地址)
  • LRU:Least Recently Used :内存保存数据的算法,被叫作近期最少使用算法,用于释放内存,它的工做原理就是把最新使用的数据存放到内存空间靠前的位置。
    好比说一个数据存入内存,若是内存中已经存在此数据,则把它的位置提早到内存空间起始位置,若是没有,则存入,并把内存空间终止位置保存的的数据给丢弃(相似堆栈)。
  1. 建立状态:进程在建立时须要申请一个空白PCB(process control block进程控制块),向其中填写控制和管理进程的信息,完成资源分配。若是建立工做没法完成,好比资源没法知足,就没法被调度运行,把此时进程所处状态称为建立状态
  2. 就绪状态:进程已准备好,已分配到所需资源,只要分配到CPU就可以当即运行
  3. 执行状态:进程处于就绪状态被调度后,进程进入执行状态
  4. 阻塞状态:正在执行的进程因为某些事件(I/O请求,申请缓存区失败)而暂时没法运行,进程受到阻塞。在知足请求时进入就绪状态等待系统调用
  5. 终止状态:进程结束,或出现错误,或被系统终止,进入终止状态。没法再执行
  1. 运行——>就绪:1,主要是进程占用CPU的时间过长,而系统分配给该进程占用CPU的时间是有限的;2,在采用抢先式优先级调度算法的系统中,当有更高优先级的进程要运行时,该进程就被迫让出CPU,该进程便由执行状态转变为就绪状态
  2. 就绪——>运行:运行的进程的时间片用完,调度就转到就绪队列中选择合适的进程分配CPU
  3. 运行——>阻塞:正在执行的进程因发生某等待事件而没法执行,则进程由执行状态变为阻塞状态,如发生了I/O请求
  4. 阻塞——>就绪:进程所等待的事件已经发生,就进入就绪队列
    • 如下两种状态是不可能发生的:
  5. 阻塞——>运行:即便给阻塞进程分配CPU,也没法执行,操做系统在进行调
    度时不会从阻塞队列进行挑选,而是从就绪队列中选取
  6. 就绪——>阻塞:就绪态根本就没有执行,谈不上进入阻塞态
  • 单一主机通信用socket文件,全双工;跨网络通信用socket套接字协议。
  • 系统优先级:数字越小,优先级越高
    0-139:各有140个运行队列和过时队列
    实时优先级: 99-0 值最大优先级最高

O(1)比较优先级大小的方式:linux

  1. 经过140个编号的优先级队列以及140个过期优先级队列,将优先级编号相同的进程放在对应的优先级栈中(一个优先级栈能够放多个进程,从左往右执行),而后从最小值(最高优先级)的队列开始执行。
  2. 当时间片到而此运行队列中的正在执行的进程没有执行完毕时,便会保存当前进程状态并将此进程放入相同优先级编号过时队列中,而后继续执行当前优先级队列中的剩余进程(一个进程在时间片内执行完了就释放,没有执行完一样放入过时优先级队列中),直到此队列的全部进程所有执行一遍,将此队列清空
  3. 此时查看此队列相同编号的过期优先级队列,里面若是有进程,则将此队列的与过时优先级队列互换身份,此运行队列变成过时优先级队列,而过时优先级队列变成正在执行的运行队列。而后重复2中步骤直到此队列的全部进程所有执行完毕而且释放
  4. 接下来就是执行下一个最高优先级队列里面的进程了,重复1-4步骤。

Linux内核:抢占式多任务

    守护进程: daemon,在系统引导过程当中启动的进程,和终端无关进程
    前台进程:跟终端相关,经过终端启动的进程
    可中断:interruptable :可中断睡眠状态是系统中进程最多的状态
    中止态:stopped,暂停于内存,但不会被调度,除非手动启动
    僵死态:zombie,结束进程,父进程结束前,子进程不关闭
  • 注意僵死态的进程已经结束了,可是仍然占用部分资源,kill命令没法再次关闭它,最好的方法就是杀掉父进程或者重启系统。

IO-Bound:IO密集型,交互 :网络吞吐,磁盘读写ios

  • 选项:不加选项时,默认显示连接到当前终端中的进程,没法显示别的终端中进程
    a 选项包括连接到全部终端中的进程
    x 选项包括不连接终端的进程
    u 选项显示进程全部者的信息
    k|--sort 属性 对属性排序,属性前加- 表示倒序 : 好比 ps aux k -%cpu ,注意后面的关键字要小写不能大写
    L 显示支持的属性列表

短格式(unix)特有选项

-C cmdlist 指定命令,多个命令用逗号,分隔 :也能够查看脚本,但要注意用 bash XXX.sh 方式运行的脚本没法查看, 同时若是脚本中没有 #!/bin/bash 就算是直接运行的脚本也没法查看了。
-L 显示线程 : pstree中花括号内就是线程,若是没有花括号表明进程只有一个线程(此命令就会显示进程了)
-e: 显示全部进程,至关于-A
-f: 显示完整格式程序信息
-F: 显示更完整格式的进程信息
-H: 以进程层级格式显示进程相关信息

  • 注意:有效用户和真正用户区别,真正用户是指执行此进程的用户realuser,而有效用户表明此进程执行的的权限用户,好比普通用户执行passwd命令,真正用户为普通用户但有效用户为root。(组相似)
  • 进程向操做系统申请的内存,它的数值能够很大,但并不是所有都使用,是个虚拟内存,按照进程本身定义的地址方式来寻址使用
  • 附加知识:chrt 修改实时优先级,不过通常不调整它,它是系统自动分配设置的,通常只修改nice用户级别的优先级
  1. 列出某个组拥有的全部进程(实际组ID:RGID或名称)
  2. 以父进程ID来显示其下全部的进程,如显示父进程为1234的全部进程
  3. 以进程树显示系统中的进程如何相互连接
  4. 要显示一个进程的全部线程,将显示LWP(轻量级进程)以及NLWP(轻量级进程数)列
  5. 要以其名称选择特定进程,显示其全部子进程
  6. 查找指定进程名全部的所属PID,在编写须要从std输出或文件读取PID的脚本时这个参数颇有用
    进程默认启动时的nice值为0,优先级为120
    只有根用户才能下降nice值(提升优先性)
  1. 最灵活方式:ps 选项 | 其它命令
    • 更多详细内容查看帮助便可
    • 注意它和lsof区别,lsof跟的是被打开的文件(或者程序,由于程序也是文件),pidof跟的就是进程名(程序若是没运行不是进程)

经过查看上面命令的$? 值能够判断进程是否中止运行了,所以就能够编写脚本监测必须运行的进程,一旦发现中止立马从新启动(配合计划任务使用极佳,固然也能够用killall 0 的方式也可)算法

    系统启动时长,空闲进程的总时长(按总的CPU核心数计算) 显示当前时间,系统已启动的时间、当前上线人数,系统平均负载(当前时间往前一、 五、 10分钟的平均负载,通常不会超过1) 指在特定时间间隔内运行队列中的平均进程数
    • 一般每一个CPU内核的当前活动进程数不大于3,那么系统的性能良好。 若是每一个CPU内核的任务数大于5,那么此主机的性能有严重问题
    • 若是linux主机是1个双核CPU,当Load Average 为6的时候说明机器已经被充分使用

top:有许多内置命令

    M:占据内存百分比,%MEM
  • si:软中断(模式切换)
    st:虚拟机偷走的时间(虚拟化技术不成熟时期,不知道CPU的时间片执行了什么进程)

    s:跟踪选定进程的系统调用
    l:显示选定进程打开的文件列表
    a:将选定的进程绑定至某指定CPU核心
  1. 简单来讲一个注重写一个注重读,不事后期由于有相同的部分它俩区别愈来愈小
  2. 注意磁盘挂载的时候有选项可直接写入硬盘 mount -o sync ,同时TCP协议中报头数据psh位置也是表示内存是否当即取走。

vmstat命令:虚拟内存信息

    r:可运行(正运行或等待运行)进程的个数,和核心数有关
    b:处于不可中断睡眠态的进程个数(被阻塞的队列的长度),好比正在读取磁盘文件的进程(IO接口速度慢,须要耗费时间)
  • swap:(注意是相对于内存的进和出来讲的,磁盘进出下同)
    si:从磁盘交换进内存的数据速率(kb/s)
    so:从内存交换至磁盘的数据速率(kb/s)
    bi:从块设备读入数据到系统的速率(kb/s)
    bo: 保存数据至块设备的速率
    -s: 显示内存的统计数据

iftop:显示带宽使用状况,EPEL源

pmap命令:进程对应的内存映射(占用了哪些内存空间,地址从哪到哪,以及一些调用的库函数)

用pmap来判断内存问题,看某个程序的内存占用是否一直增加判断它内存泄露

  • 内存泄露:进程执行完毕不释放所占的内存空间
  • 内存溢出:进程申请执行时所用的内存空间不够,直接霸占更多的内存空间进行使用(可能影响其余进程,若是多霸占的内存空间正好被其余进程使用中)
  • 注意两个主机上都要装有glances工具,而且版本要一致(6和6,7和7),而后开启服务器的监听功能以后,客户机就能够随时链接监听服务器端了。

iotop命令是一个用来监视磁盘I/O使用情况的top类工具iotop具备与top类似的UI,其中包括PID、用户、I/O、进程等相关信息,可查看每一个进程是如何使用IO

    第二行:实际的Read和Write速率
    线程ID(按p切换为进程ID)

iotop经常使用参数

-o, --only只显示正在产生I/O的进程或线程,除了传参,能够在运行过程当中按o生效
-b, --batch非交互模式,通常用来记录日志
-n NUM, --iter=NUM设置监测的次数,默认无限。在非交互模式下颇有用
-k, --kilobytes使用kB单位,而不是对人友好的单位。在非交互模式下,脚本编程有用
-t, --time 加上时间戳,非交互非模式
-q, --quiet 禁止头几行,非交互模式,有三种指定方式
-q 只在第一次监测时显示列名
-qq 永远不显示列名

nload 查看网络实时吞吐量

  • nload是一个实时监控网络流量和带宽使用状况,以数值和动态图展现进出的流量状况
  • 上下方向键、左右方向键、 enter键或者tab键都就能够切换查看多个网卡的流量状况
    按 F2 显示选项窗口

  • nload:默认只查看第一个网络的流量进出状况
  • 设置刷新间隔:默认刷新间隔是100毫秒,可经过-t命令设置刷新时间(单位是毫秒)

lsof:list open files 查看当前系统文件的工具。在linux环境下,一切皆文件,用户经过文件不只能够访问常规数据,还能够访问网络链接和硬件如传输控制协议(TCP)和用户数据报协议(UDP)套接字等,系统在后台都为该应用程序分配了一个文件描述符

    -a:列出打开文件存在的进程
    -c<进程名>:列出指定进程所打开的文件
    -g:列出GID号进程详情
    -d<文件号>:列出占用该文件号的进程
    +d<目录>:列出目录下被打开的文件
    +D<目录>:递归列出目录下被打开的文件
    -i<条件>:列出符合条件的进程(四、 六、协议、 :端口、 @ip )
    -p<进程号>:列出指定进程号所打开的文件
    -u:列出UID号进程详情
    -n: 不反向解析网络名字
  1. 查看由登录用户启动而非系统启动的进程
  2. 指定进程号,能够查看该进程打开的文件
    • 参数+D为递归列出目录下被打开的文件,参数+d为列出目录下被打开的文件
    经过参数-i查看网络链接的状况,包括链接的ip、端口等以及一些服务的链接状况,例如:sshd等。也能够经过指定ip查看该ip的网络链接状况 经过参数-i:端口能够查看端口的占用状况,-i参数还有查看协议,ip的链接状况等
  1. 查看指定进程打开的网络链接
    参数-i、 -a、 -p等,-i查看网络链接状况,-a查看存在的进程,-p指定进程
  • 向进程发送控制信号,以实现对进程管理,每一个信号对应一个数字,信号名称以SIG开、头(可省略),不区分大小写
kill mingettypid :此命令执行后发现pid号虽然没了,可是会生成一个新的pid号把它从新挂起 kill 1 :杀不死1进程,可是此时再次执行 kill pidmingetty 发现它没法再自动起来了,说明此命令对于1进程仍是有影响的 所以不要随便用kill杀进程,好比杀掉sshd服务,则远程将没法再次链接,必须在硬件主机上面重启sshd :systemctl start sshd 才能够再次使用,这将有可能出现严重问题
  • 按名称:killall [-SIGNAL] comm… :它能够一次性杀掉对应名字进程包含的全部pid ,而kill 一次只能杀掉一个

此命令不进行进程管理,可是会检查cmd名进程是否正常运行,相似于pidof ,把返回值存入$?中,用于判断cmd进程是否正常运行。

    前台做业:经过终端启动,且启动后一直占据终端
    后台做业:可经过终端启动,但启动后即转入后台运行(释放终端) (1) 运行中的做业: Ctrl+z ,它会放入后端可是让它处于stop休眠状态
    • 注意:后台做业虽然被送日后台运行,但其依然与终端相关;退出当前终端,将关闭后台做业。若是但愿送日后台后,剥离与终端的关系,有如下两种方式:
  1. 查看当前终端全部做业:jobs
  1. killall -18 手动开启休眠状态的进程 ,killall -19 手动中止正在运行的进程。这两个命令和前端,后端没有任何关系,和终端也没有关系,只要能找到进程,就可用它操做(也可用pstree -p 或则 pidof 或者 ps aux 找到进程编号而后kill -18 -19也可)
  2. 进程和终端相关是由于它是在终端内开了个子shell来运行的,只要终端关闭(好比远程sshd服务终端关闭),父进程都关闭了那么它下面的不管是前端仍是后端任务都将会关闭,例如关闭终端至关于关闭6681进程,则ping命令固然会关闭,不管前端后端。
  • 上面都是centos7中的逻辑,可是centos6中,若是终端关闭,则它下面的子进程会自动挂载到init上继续运行,注意区分。
  1. 所以用nohup将命令运行以后,当终端关闭它会挂载到systemd上继续运行。或者还可用screen程序,则终端掉了也不会影响命令的执行。
  2. 注意,command & 和 ctrl z 的区别,一个已经运行调到后端不运行,一个没有运行调到后端运行。
  3. 注意fg会把后端的进城调回到前端并运行,无论它在后端否运行仍是不运行。一样的bg也是让进程调回到后端进行运行,只不过由于进程前段运行的时候没法操做,同时也没有jobs编号,因此已经运行进程要用ctrl+z调到后端中止运行,而后再用bg 启动运行。

nohup会有各类输出信息,会默认存放到文件中,相似于计划任务,要将它重定向到垃圾箱。
或者先重定向到本身的一个文件中,而后用脚本删除多少天之前的log日志。
再或者直接重定向到系统本身控制的log缓存文件夹中,它会自动清除。不过须要注意不能反复重定向一个文件,否则它一直在修改此文件的mtime,根据规则就不会自动清除它了。

  • 同时运行多个进程,提升效率(至关于同时启动多个后台程序)

Linux任务计划、周期性任务执行

将来的某时间点执行一次任务

at 指定时间点,执行一次性任务
batch 系统自行选择空闲时间去执行此处指定的任务

-l 列出指定队列中等待运行的做业;至关于atq
-d 删除指定的做业;至关于atrm
-c #(编号) :查看具体做业任务
-m 当任务被完成以后,将给用户发送邮件,即便没有标准输出

  • 注意:做业执行命令的结果中的标准输出和错误以邮件通知给相关用户

TIME格式:定义出何时进行 at 这项任务的时间

    在今日的 HH:MM 进行,若该时刻已过,则明天此时执行任务
    • 注意:测试中发现若是设置的时间小于当前时间点(好比如今时间3点,执行命令2点)则它会明天执行(即便此时把时间改成1点59分它也不会立刻执行了,由于还有日期的关系,别忘记了)须要注意这一点(crontab中也是这个原理)。

(1)交互式 (2)输入重定向(多行)(3)管道| (4)at –f 文件
它依赖于atd服务,须要启动才能实现at任务

  • 注意at交互式的话须要用ctrl+d结束。
  • 白名单:/etc/at.allow 默认不存在,只有该文件中的用户才能执行at命令
  • 黑名单:/etc/at.deny 默认存在,拒绝该文件中用户执行at命令,而没有在at.deny 文件中的使用者则可执行
  1. 若是存在了白名单,则黑名单无效了,若是两个文件都不存在,只有 root 能够执行 at 命令。
  2. 直接用at命令写的计划任务重启后丢失。
  3. at 中的计划任务命令中的标准输出不会在屏幕上打印,它会自动写入邮件中发送。用-m可让没有标准输出的命令也发邮件,为了证实此at任务确实执行了

周期性任务计划cron

周期性任务计划:cron
cronie:主程序包,提供crond守护进程及相关辅助工具
cronie-anacron:cronie的补充程序,用于监控cronie任务执行情况,如cronie中的任务在过去该运行的时间点未能正常运行,则anacron会随后启动一次此任务

  1. 计划周期性执行的任务提交给crond,到指定时间会自动运行系统cron任务:系统维护做业
    /etc/crontab :尽可能不要改这个系统级定义的计划任务文件,而是本身定义,用命令crontab -e (参照格式写,其中user-name无需再写)

给定时间点有效取值范围内的值
给定时间点上有效取值范围内的全部值
(5) 在指定时间范围上,定义步长

0

运行计算机关机时cron不运行的任务,CentOS6之后版本取消anacron服务,由crond服务管理
对笔记本电脑、台式机、工做站、偶尔要关机的服务器及其它不一直开机的系统很重要对颇有用

    字段1:若是在这些日子里没有运行这些任务……
    字段2:在从新引导后等待这么多分钟后运行它
    字段3:任务识别器,在日志文件中标识
  • 没有被重定向的输出会被邮寄给用户
  • root可以修改其它用户的做业

对于cron任务来说,%有特殊用途;若是在命令中要使用%,则须要转义,或者将%放置于单引号中,则可不用转义.若是须要%(好比date命令中),则要把它写入脚本中,而后执行脚本便可

  1. at 和crontab在 测试中发现若是设置的时间小于当前时间点(好比如今时间3点,执行命令2点)则它会明天执行(即便此时把时间改成1点59分它也不会立刻执行了,由于还有日期的关系,别忘记了)须要注意这一点
  2. 写入计划任务的命令的标准输出尽可能都扔到垃圾箱里面,由于它都会以邮件方式进行保存,若是执行的次数过多也会形成垃圾文件。因此都重定向到垃圾箱内比较好(固然 at命令能够不用这样设置,由于它仅仅执行一次,甚至用-m 强行发送邮件判断它是否执行)。

    • 也能够用一个脚本删除多少天之前的邮件或者log文件来清除此缓存。
    • 注意它的log文件只是检测了这个计划任务是否执行,而不检测里面的命令的输出信息,里面额命令的输出信息才是保存在邮件中的信息。
  3. 脚本或者命令最好写全路径。
  4. 注意一点,若是时间格式以下所示,则表明的日子和星期并不是是与的关系,而是或的关系,它表示每个月的1 10 20日和每周的星期1 5 都会进行计划任务。
    • 若是非要是与的关系,则只能在后面的CMD中进行判断了,好比下面的判断是不是周日

例子:计划任务来重启httpd服务

(1) 如何在秒级别运行任务?

(2) 如何实现每7分钟运行一次任务?

}

要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程,ps命令就是最基本进程查看命令。使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵尸、哪些进程占用了过多的资源等等.总之大部分信息都是可以通过执行该命令得到。

ps是显示瞬间进程的状态,并不动态连续;如果想对进程进行实时监控应该用top命令。

基本参数:-A :所有的进程均显示出来,与 -e 具有同样的效用;

-a :显示现行终端机下的所有进程,包括其他用户的进程;

-u :以用户为主的进程状态 ;

x :通常与 a 这个参数一起使用,可列出较完整信息。

输出格式规划:l :较长、较详细的将该PID 的的信息列出;

-f :做一个更为完整的输出。

下面我们就来一个命令进行实践,看看不同的参数都有些什么效果。

2. 不加参数执行ps命令会输出什么?

这是一个基本的 ps 使用,我们来看看控制台中执行这个命令并查看结果。

结果默认会显示4列信息:PID: 运行着的命令(CMD)的进程编号

TTY: 命令所运行的位置(终端)

TIME: 运行着的该命令所占用的CPU处理时间

CMD: 该进程所运行的命令

这些信息在显示时未排序。

3. 如何显示所有当前进程?

使用 -a 参数,-a 代表 all。同时加上x参数会显示没有控制终端的进程。

3.# 这个命令的结果或许会很长。为了便于查看,可以结合less命令和管道来使用。

4. 如何根据进程的用户进行信息过滤呢?

在需要查看特定用户进程的情况下,我们可以使用 -u 参数。比如我们要查看用户'pungki'的进程,可以通过下面的命令:

5. 如何通过cpu和内存使用来过滤进程?

也许你希望把结果按照 CPU 或者内存用量来筛选,这样你就找到哪个进程占用了你的资源。要做到这一点,我们可以使用 aux 参数,来显示全面的信息:

当结果很长时,我们可以使用管道和less命令来筛选。

默认的结果集是未排好序的。可以通过 --sort命令来排序。

5.1 根据CPU使用率来升序排序

5.2 根据内存使用率来升序排序

5.3 我们也可以将它们合并到一个命令,并通过管道显示前10个结果:

6. 如何通过进程名和PID进行过滤呢?

使用 -C 参数,后面跟你要找的进程的名字。比如想显示一个名为getty的进程的信息,就可以使用下面的命令:

如果想要看到更多的细节,我们可以使用-f参数来查看格式化的信息列表:

7. 如何根据进程来过滤进程呢?

如果我们想知道特定进程的线程,可以使用 -L 参数,后面加上特定的PID。

8. 如何树形的显示进程?

有时候我们希望以树形结构显示进程,可以使用 -axjf 参数。

或者可以使用另一个命令。

9. 如何显示安全信息?

如果想要查看现在有谁登入了你的服务器。可以使用ps命令加上相关参数:

参数 -e 显示所有进程信息,-o 参数控制输出。Pid,User 和 Args参数显示PID,运行应用的用户和该应用。

10. 如何格式化输出root用户(真实的或有效的UID)创建的进程?

系统管理员想要查看由root用户运行的进程和这个进程的其他相关信息时,可以通过下面的命令:

-U 参数按真实用户ID(RUID)筛选进程,它会从用户列表中选择真实用户名或 ID。真实用户即实际创建该进程的用户。

这里有上面的命令的输出结果:

11. 如何使用PS实时监控进程状态?

ps 命令会显示你系统当前的进程状态,但是这个结果是静态的。

当有一种情况,我们需要像上面第四点中提到的通过CPU和内存的使用率来筛选进程,并且我们希望结果能够每秒刷新一次。为此,我们可以将ps命令和watch命令结合起来。

如果输出太长,我们也可以限制它,比如前20条,我们可以使用 head 命令来做到。

这里的动态查看并不像top或者htop命令一样。但是使用ps的好处是你能够定义显示的字段,你能够选择你想查看的字段。

举个例子,如果你只需要看名为'pungki'用户的信息,你可以使用下面的命令:

你也许每天都会使用ps命令来监控你的Linux系统。但是事实上,你可以通过ps命令的参数来生成各种你需要的报表。

ps命令的另一个优势是ps是各种 Linux系统都默认安装的,因此你只要用就行了。不要忘了通过 man ps来查看更多的参数。

}

我要回帖

更多关于 comm命令的使用方法 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信