进程与计划任务

进程详解

linux中内核的功用:进程管理,文件系统,网络功能,内存管理,驱动程序,安全功能等。

Process 进程

表示运行中的程序的一个副本,是载入内存的一个指令集合。每一个进程,都有一个唯一的进程ID(Process ID),该ID号码被用来标识各个进程。其中,UID,GID,和SELinux语境决定对文件系统的存储和访问权限。通常由执行进程的用户来继承,进程存在生命周期。

程序,相当于一个磁盘文件(当不运行的时候),当运行的时候,会将该文件读取到内存中执行。
内存会给该程序分配一块内存中间,并且分配一个进程ID(PID),这就是进程的诞生。

进程与程序的区别 ?

进程是一个动态的概念,存在生命期,而程序只是磁盘上的文件,是静态的,不存在所谓的生命期。
一个进程,通常对应一个程序,而一个程序,可以对应多个进程。

Task struct

Linux内核通过一个被称为进程描述符的task_struct结构体来管理进程,这个结构体包含了一个进程所需的所有信息。它定义在linux-2.6.38.8/include/linux/sched.h文件中。多个task struct 可以组成链表。称为:task list

详解文章 未来需要的时候可以查看
https://blog.csdn.net/peiyao456/article/details/54407343
https://blog.csdn.net/lf_2016/article/details/54347820

进程创建

在linux中,执行程序后会生成对应的进程,其中
init : 第一个进程
子进程都是由其父进程来创建。

其中,内核中的,fork()方法,用来生成子进程。clone()方法,可以生成子进程和兄弟进程。

子进程创建机制

copy on wirte : cow 机制 写时复制

在进程创建的时候,父进程正在运行,当他需要开启子进程的时候,系统会在内存中,生成一个新的子进程信息,如果新的子进程信息还未修改。那么只占用同样的内存空间。这时候子进程与父进程,指向同一块内存空间,共用这块内存空间。节约空间。
当子进程涉及到内存修改,才会创建一块新的空间,将子进程移动过去。
当子进程没有被修改时,与父进程占用同样的空间,当子进程发生修改,才会创建新的内存空间存放子进程。

多个程序运行的时候,基于时间片机制,CPU将时间分成多个时间片,每个时间执行不同的操作。

进程的基本状态和转换

创建:进程在创建时需要申请一个空白PCB(process control block进程控制块),向其中填写控制和管理进程的信息,完成资源分配。如果创建工作无法完成,比如资源无法满足,就无法被调度运行,把此时进程所处状态称为创建状态。
就绪:进程已经准备好,已分配到所需资源,只要分配到CPU时间片就能够立即运行。
阻塞:正在执行的进程由于某些事件(I/O请求,申请缓存区失败)而暂时无法运行,进程受到阻塞。在满足请求时进入就绪状态等待系统调用。
执行:进程处于就绪状态被调度后,进程进入执行状态。
终止:进程结束,或出现错误,或被系统终止,进入终止状态。无法再执行

进程执行模式

根据系统和CPU的架构,分为两种状态:

  • 协作式多任务:1个进程霸占CPU,直到这个进程结束,才把CPU交给别的CPU使用。这种状态存在非常大的问题,当使用CPU的进程发生崩溃或者假死,整个操作系统都将瘫痪,无法使用。
  • 抢占式多任务:按时间片来分配,给每个进程的执行分配一定时间的时间片,当CPU时间片消耗完成,必须释放CPU,将给别的进程使用。

状态转换

  • 运行 - > 就绪:1,主要是进程占用CPU的时间过长,而系统分配给该进程占用CPU的时间是有限的;2,在采用抢先式优
    先级调度算法的系统中,当有更高优先级的进程要运行时,该进程就被迫让出CPU,该进程便由执行状态转变为就绪状态。
  • 就绪——>运行:运行进程的CPU时间片用完,调度就转到就绪队列中选择合适的进程分配CPU
  • 运行——>阻塞:正在执行的进程因发生某等待事件而无法执行,则进程由执行状态变为阻塞状态,如发生了I/O请求
  • 阻塞——>就绪:进程所等待的事件已经发生,就进入就绪队列
    以下两种状态是不可能发生的:
  • 阻塞——>运行:即使给阻塞进程分配CPU,也无法执行,操作系统在进行调度时不会从阻塞队列进行挑选,而是从就绪队列中选取
  • 就绪——>阻塞:就绪态根本就没有执行,谈不上进入阻塞态。不可能在未执行的时候就阻塞!!。

进程优先级

用于让CPU选择先后执行的进程顺序。各有140个运行队列和过期队列
系统优先级: 数字越小,优先级越高

  • 0-139(CentOS4,5)各有140个运行队列和过期队列
  • 0-98,99(CentOS6)

实时优先级: 99-0 值最大优先级最高,与系统优先级相反。
nice值:-20到19,对应系统优先级100-139或99

上图中的表示,要记住,系统优先级是数字越小越高,而实时优先级是数字越大越高!!
nice的值越大,这个进程的优先级就越小!!!

Linux内核实现了两种不同的优先级范围。第一种是用nice值,它的范围是[-20, 19],默认值是0。越大的nice值意味着优先级越低--你对系统中的别的进程"nice"。相比于那些高nice值(低优先级)的进程来说,低nice值(高优先级)的进程可以获得更多的处理器时间。
会叫的孩子有奶吃,越是不nice的进程越有CPU优先使用权(也就是优先级高咯)。

进程队列

  • 运行队列:存放要运行的进程队列
  • 过期队列:存放运行队列中,运行完当前时间片,但是没有运行完全结束的进程

每个优先级,都有运行队列和过期队列

实际的调度过程

内存中存在: 运行队列 0 ,0队列中存在 1 2 3 这3个程序。 运行队列 1 ,1队列中存在5,6,7
这时候 1运行完CPU时间片,当该时间片执行完,1程序却还没有全部执行完,就把1放到0优先级的过期队列。然后执行2 以此类推。
当 0运行队列中不存在进程的时候,0过期队列就会转化成0运行队列,然后跟其他队列进行优先级比较,谁优先级高就运行谁的队列。他跟1比还是0优先级高,所以继续执行0。

其实也就是高优先级的队列中所有进程全部结束时,才会去执行低优先级队列中的进程。

进程相关概念

Page Frame:页框,用于存储页面数据,存储单位为4K。(尽可能的使用内存当缓存,加速运行效率 ,cache最多也就占用内存的90%)
LRU : 近期最少使用算法,释放内存物理地址空间和线性地址空间。缓存的工作机制,主要用来淘汰最近最少被使用访问的内存数 LRU算法存在复杂的变种。

工作机制类似一个可变的堆栈。当数据进入时,会进入缓存,将新的数据进入后,旧数据会往下压。除非使用旧的数据,那么旧数据会再次回到栈顶。当空间不够用的时候,会把栈底的从内存中移出。

MMU:Memory Management Unit负责转换线性和物理地址

  • 物理地址空间:从A内存空间到B内存空间,实际占用的内存空间
  • 线性地址空间:比如给程序分配100Mb内存,那么程序认为就是从0开始,到100MB这个空间 。而不是FFFFFFF 到 FFFFFFF 啥的具体内存地址,程序认为自己拥有全部内存

TLB:Translation Lookaside Buffer 翻译后备缓冲器,用于保存虚拟地址和物理地址映射关系的缓存。

跨进程通讯

同一主机,地址

通过以下三种方式:

  • signal:信号
  • shm: shared memory
  • semaphore:信号量,一种计数器

通过信号或者共享内存,因为程序在分配内存空间的时候,都会认为自己所得的是一切内存空间。进程之间互相不知道彼此的存在。
信号量:相当于一种计数器。相当于某种资源,这种资源只能背进程独占。表示该资源是否可用

不同主机

  • socket:IP地址 + 端口号
  • RPC remote procedure call 远程过程调用。 假设A机器上运行一段程序,运行过程中,A通过远程调用,运行了B机器上的协助程序,运行完成后,B机器返回为A机器结果,A获取后继续运行,这就是远程过程调用。
  • MQ 消息队列,Kafka,ActiveMQ 多台服务器,将程序发送给消息队列,由消息队列来控制通讯和相关操作

RPC MQ 底层都会依赖socket

进程状态

Linux内核属于:抢占式多任务
进程类型:

  • 守护进程: daemon,在系统引导过程中启动的进程,和终端无关进程
  • 前台进程:跟终端相关,通过终端启动的进程,占用终端资源,通常终端在执行前台进程的时候,不允许进行其他操作。
  • 后台进程:后台执行,不占用终端资源。(守护进程,通常都是后台进程

注意:两者可相互转化

进程状态:

  • 运行态:running
  • 就绪态:ready

睡眠态:

  • 可中断:interruptable 表示可换新
  • 不可中断:uninterruptable 不可人为唤醒,睡眠时间过去才能继续运行

停止态:stopped,暂停于内存,但不会被调度,除非手动启动
僵死态:zombie,结束进程,父进程结束前,子进程不关闭。正常情况下,进程结束后,会释放内存空间,僵死态的进程即使结束后,仍会占用内存空间。

系统中存在最多的是可中断睡眠态进程
一个进程,可以有多个线程
进程好比一个项目小组,里面有多个人,每个人就相当于一个线程,在干不同的事情

进程的分类

CPU-Bound:CPU密集型,非交互
IO-Bound:IO密集型,交互

Linux系统状态的查看及管理工具:pstree, ps, pidof,
pgrep, top, htop, glance, pmap, vmstat, dstat, kill,
pkill, job, bg, fg, nohup

进程管理工具

ps

用于查看进程,由于命令古老,所以支持三种不同类型的选项.
UNIX选项 如-A -e
BSD选项 如a
GNU选项 如--help
默认只显示当前一个终端的进程。ps process state 显示进程状态 基于快照 。
ls /proc/ 下可以查看所有的进程文件
Linux系统各进程的相关信息均保存在/proc/PID目录下的各文件中
运行程序的时候,可以直接指定程序的优先级,而不是运行起来再指定。
ps 基于快照机制,并不是实时观察系统的情况,只是观察使用命令的那一个瞬间

选项:默认显示当前终端中的进程

  • a 选项包括所有终端中的进程
  • x 选项包括不链接终端的进程 (系统自己的进程,即使不连接终端也在运行的那些。)
  • u 选项显示进程所有者的信息
  • f 选项显示进程树,相当于 --forest (把子进程都显示出来,以树桩结构的形式。)
  • k|--sort 属性 对属性排序,属性前加- 表示倒序
  • o 属性… 选项显示定制的信息 pid、cmd、%cpu、%mem
  • L 显示支持的属性列表
  • C cmdlist 指定命令,多个命令用,分隔
  • L 显示线程
  • e: 显示所有进程,相当于-A
  • -f: 显示完整格式程序信息
  • -F: 显示更完整格式的进程信息
  • -H: 以进程层级格式显示进程相关信息
  • -u userlist 指定有效的用户ID或名称
  • -U userlist 指定真正的用户ID或名称
  • -g gid或groupname 指定有效的gid或组名称
  • -G gid或groupname 指定真正的gid或组名称
  • -p pid 显示指pid的进程
  • --ppid pid 显示属于pid的子进程
  • -M 显示SELinux信息,相当于Z

其中,PS所输出属性的一些翻译:

  • VSZ:Virtual memory SiZe,虚拟内存集,线性内存 (承诺内存
  • RSS: ReSident Size, 常驻内存集 。(实际分配的内存)

承诺内存表示系统承诺可以分配给一个进程的内存空间,而实际内存则是当前分配给该进程的真实内存空间。相当于一个上限和画大饼。

各相关信息的意义:

  1. F 代表这个程序的旗标 (flag), 4 代表使用者为 super user
  2. S 代表这个程序的状态 (STAT),关于各 STAT 的意义将在内文介绍
  3. UID 程序被该 UID 所拥有
  4. PID 就是这个程序的进程ID
  5. PPID 则是其上级父程序的ID
  6. C,%CPU : CPU 使用的资源百分比
  7. M,%MEM : 内存使用的资源百分比
  8. PRI:这个是程序优先级,画图表示是系统优先级反过来画, 最左边139,最右边0 pri越大,优先级越大
  9. NI:这个是 Nice 值
  10. ADDR:这个是 kernel function,指出该程序在内存的那个部分。如果是个 running的程序,一般就是 "-"
  11. SZ:使用掉的内存大小
  12. WCHAN:目前这个程序是否正在运作当中,若为 - 表示正在运作
  13. TTY:登入者的终端机位置,终端编号
  14. TIME:使用掉的 CPU 时间。占用时间片总和
  15. CMD:所下达的指令为何,指令路径
  16. PSR:CPU编号,当前程序使用的cpu编号 (进程切换和CPU切换,都是有性能消耗的。把进程绑定到某颗CPU,让他不进行CPU 切换,提高运行效率)
  17. rtprio:实时优先级
  18. euser 有效用户,表示拥有该文件权限的用户
  19. ruser 真实运行用户 ,表示真实运行该文件的用户
  20. etime 程序运行时间 运行时间并不代表cpu时间片占用时间
  21. SPR 程序运行在哪颗CPU上
  22. STAT:进程状态
  • R:running
  • S: interruptable sleeping 可中断休眠态
  • D: uninterruptable sleeping 不可中断休眠态
  • T: stopped
  • Z: zombie
  • +: 前台进程
  • l: 多线程进程
  • L:内存分页并带锁
  • N:低优先级进程
  • <: 高优先级进程
  • s: session leader,会话(子进程)发起者

实例

ps axo 显示后面的选项 pid,cmd,psr,ni,pri,rtpr
ps o pid,cmd,%cpu 只显示pid,cmd,cpu利用率
ps axo pid,cmd,%cpu,tty k %cpu 按cpu使用率来排序显示 ,默认是按pid进行排序的
ps -C 1.sh -C 2.sh 显示多个脚本的信息
ps -C 1.sh -C ping o pid,%cpu,%mem 显示1.sh 和 ping 命令的cpu和内存的使用率
bash 脚本如果不加头文件的话,使用 ps -C 脚本名,是找不到这个执行脚本的

查询你拥有的所有进程
ps -x
显示指定用户名(RUID)或用户ID的进程:
ps -fU apache
ps -fu 48
显示指定用户名(EUID)或用户ID的进程:
ps -fu wang
ps -fu 1000
查看以root用户权限(实际和有效ID)运行的每个进程:
ps -U root -u root
列出某个组拥有的所有进程(实际组ID:RGID或名称):
ps -fG nginx

列出有效组名称(或会话)所拥有的所有进程:
ps -fg mysql
ps -fG 27
通过进程ID来显示所属的进程:
ps -fp 1234
父进程ID来显示其下所有的进程,如显示父进程为1154的
所有进程:
ps -f --ppid 1234
显示指定PID的多个进程:
ps -fp 1204,1239,1263
要按tty显示所属进程:
ps -ft pst/0
以进程树显示系统中的进程如何相互链接:
ps -e --forest
以进程树显示指定的进程
ps -f --forest -C sshd
ps -ef --forest | grep -v grep | grep sshd
要显示一个进程的所有线程,将显示LWP(轻量级进程)以及NLWP(轻量级进程数)列:
ps -fL -C nginx
要列出所有格式说明符:
ps L
查看进程的PID,PPID,用户名和命令:
ps -eo pid,ppid,user,cmd
19
自定义格式显示文件系统组,ni值开始时间和进程的时间:
ps -p 1234 -o pid,ppid,fgroup,ni,lstart,etime
使用其PID查找进程名称:
ps -p 1244 -o comm=
要以其名称选择特定进程,显示其所有子进程
ps -C sshd,bash
查找指定进程名所有的所属PID,在编写需要从std输出或文件读取PID的脚本时这个参数很有用:
ps -C httpd,sshd -o pid=
检查一个进程的执行时间
ps -eo comm,etime,user | grep nginx

查找占用最多内存和CPU的进程:
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head
显示安全信息:
ps -eM
ps --context
使用以下命令以用户定义的格式显示安全信息。
ps -eo euser,ruser,suser,fuser,f,comm,label
使用watch实用程序执行重复的输出以实现对就程进行实时的监视,如下面的命令显示每秒钟的监视:
watch -n 1 'ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head'

pstree

查看进程树

pstree -p 花括号扩起来的就是线程
pstree 显示进程树桩结构

优先级调整 renice

进程优先级调整:
静态优先级:100-139
进程默认启动时的nice值为0,优先级为120
只有根用户才能降低nice值(提高优先性)
调整程序的nice优先级
nice -n -5 sleep 100 把sleep 100 的优先级设置为-5后运行

pgrep 进程过滤

专门用于显示进程过滤后信息的命令
其实最灵活的用法还是ps选项 | 其他命令

按预定义的模式:pgrep

  • pgrep [options] pattern
  • u uid: effective user,生效者
  • U uid: real user,真正发起运行命令者
  • t terminal: 与指定终端相关的进程
  • l: 显示进程名
  • a: 显示完整格式的进程名
  • P pid: 显示指定进程的子进程
    按确切的程序名称:/sbin/pidof
    pidof bash 可以查出指定名称的PID

pgrep -at pts/0 显示pts/0 这个终端的进程信息
pgrep "vi.*" 使用正则表达式来匹配显示 (不是文件标识符)

uptime 显示系统情况

启动总时长 用户数 平均负载情况 1分钟 5分钟 10分钟
数值大的话说明系统的CPU占用过高,负载过大,需要排查

系统平均负载:指在特定时间间隔内运行队列中的平均进程数
通常每个CPU内核的当前活动进程数不大于3,那么系统的性能良好。如果每个CPU内核的任务数大于5,那么此主机的性能有严重问题。
如果linux主机是1个双核CPU,当Load Average 为6的时候说明机器已经被充分使用。

top 实时观察系统使用情况

栏位信息简介:
us 用户占用
sy 系统占用
ni 调整nice优先级时间
id 空闲百分比
wa 等待IO时间
hi 软中断 (模式切换)
si 硬中断 (cpu 的一种处理机制)
st 偷盗时间 (比如在linux中跑了一个虚拟机,系统不知道为什么cpu和内存被占用了,就会在st 中显示。)

top存在许多的内置命令:
默认按cpu使用率排序

  • m 按内存使用率排序
  • P 按CPU使用率排序
  • T:累积占据CPU时长,TIME+

首部信息显示:

  • uptime信息:l命令
  • tasks及cpu信息:t命令
  • cpu分别显示:1 (数字)
  • memory信息:m命令

退出命令:q
修改刷新时间间隔:s
终止指定进程:k
保存文件:W (把当前显示的数据保存到文件中)

top -d 5 直接设置刷新间隔为5后显示top菜单
top -b 全部显示所有进程
top -n # 刷新多少次后退出

**硬中断:**

1\. 硬中断是由硬件产生的,比如,像磁盘,网卡,键盘,时钟等。每个设备或设备集都有它自己的IRQ(中断请求)。基于IRQ,CPU可以将相应的请求分发到对应的硬件驱动上(注:硬件驱动通常是内核中的一个子程序,而不是一个独立的进程)。

2\. 处理中断的驱动是需要运行在CPU上的,因此,当中断产生的时候,CPU会中断当前正在运行的任务,来处理中断。在有多核心的系统上,一个中断通常只能中断一颗CPU(也有一种特殊的情况,就是在大型主机上是有硬件通道的,它可以在没有主CPU的支持下,可以同时处理多个中断。)。

3\. 硬中断可以直接中断CPU。它会引起内核中相关的代码被触发。对于那些需要花费一些时间去处理的进程,中断代码本身也可以被其他的硬中断中断。

4\. 对于时钟中断,内核调度代码会将当前正在运行的进程挂起,从而让其他的进程来运行。它的存在是为了让调度代码(或称为调度器)可以调度多任务。


**软中断:**

1\. 软中断的处理非常像硬中断。然而,它们仅仅是由当前正在运行的进程所产生的。

2\. 通常,软中断是一些对I/O的请求。这些请求会调用内核中可以调度I/O发生的程序。对于某些设备,I/O请求需要被立即处理,而磁盘I/O请求通常可以排队并且可以稍后处理。根据I/O模型的不同,进程或许会被挂起直到I/O完成,此时内核调度器就会选择另一个进程去运行。I/O可以在进程之间产生并且调度过程通常和磁盘I/O的方式是相同。

3\. 软中断仅与内核相联系。而内核主要负责对需要运行的任何其他的进程进行调度。一些内核允许设备驱动的一些部分存在于用户空间,并且当需要的时候内核也会调度这个进程去运行。

4\. 软中断并不会直接中断CPU。也只有当前正在运行的代码(或进程)才会产生软中断。这种中断是一种需要内核为正在运行的进程去做一些事情(通常为I/O)的请求。有一个特殊的软中断是Yield调用,它的作用是请求内核调度器去查看是否有一些其他的进程可以运行。

**问题解答:**

**1\. 问:**对于软中断,I/O操作是否是由内核中的I/O设备驱动设备完成?

答:对于I/O请求,内核会将这项工作分派给合适的内核驱动程序,这个程序会对I/O进行队列化,以可以稍后处理(通常是磁盘I/O),或如果可能可以立即执行它。通常,当对硬中断进行回应的时候,这个队列会被驱动所处理。当一个I/O请求完成的时候,下一个在队列中的I/O请求就会发送到这个设备上。

2\. 问:软中断所经过的操作流程是比硬中断的少吗?换句话说,对于软中断就是:进程 ->内核中的设备驱动程序;对于硬中断:硬件->CPU->内核中的设备驱动程序?

答:是的,软中断比硬中断少了一个硬件发送信号的步骤。产生软中断的进程一定是当前正在运行的进程,因此它们不会中断CPU。但是它们会中断调用代码的流程。

如果硬件需要CPU去做一些事情,那么这个硬件会使CPU中断当前正在运行的代码。而后CPU会将当前正在运行进程的当前状态放到堆栈(stack)中,以至于之后可以返回继续运行。这种中断可以停止一个正在运行的进程;可以停止正处理另一个中断的内核代码;或者可以停止空闲进程。

htop

需要配置epel源,通过epel源进行下载,一个进阶的,更智能的系统监控命令。
选项:

  • -d #: 指定延迟时间;
  • -u UserName: 仅显示指定用户的进程
  • -s COLUME: 以指定字段进行排序

子命令:

  • s: 跟踪选定进程的系统调用
  • l: 显示选定进程打开的文件列表
  • a:将选定的进程绑定至某指定CPU核心
  • t: 显示进程树

free -o 只能在centos6上操作

echo 1 > /proc/sys/vm/drop_caches 清除缓存

vmstat

虚拟内存信息命令,用于查看虚拟内存使用情况,vmstat对操作的监控,均以内存为参照物的。

procs:

  • r:可运行(正运行或等待运行)进程的个数,和核心数有关 正在运行的进程
  • b:处于不可中断睡眠态的进程个数(被阻塞的队列的长度) 可终端休眠的进程

memory:

  • swpd: 交换内存的使用总量
  • free:空闲物理内存总量
  • buffer:用于buffer的内存总量
  • cache:用于cache的内存总量

swap:

  • si:从磁盘交换进内存的数据速率(kb/s) 读磁盘,进交换分区
  • so:从内存交换至磁盘的数据速率(kb/s) 写磁盘,出交换分区

io:

  • bi:从块设备读入数据到系统的速率(kb/s)
  • bo: 保存数据至块设备的速率

system:

  • in: interrupts 中断速率,包括时钟
  • cs: context switch 进程切换速率

cpu:

  • us: Time spent running non-kernel code 用于运行非内核代码的时间 (用户消耗时间)
  • sy: Time spent running kernel code 用于运行内核代码的时间 (系统消耗时间)
  • id: Time spent idle. Linux 空闲的时间 2.5.41前,包括IO-wait time.
  • wa: Time spent waiting for IO. 等待IO的时间 2.5.41前,包括in idle.
  • st: Time stolen from a virtual machine. 被窃取的时间(虚拟机) 2.6.11前, unknown

iostat

统计CPU和设备IO信息
iostat /s读写速度 读写量

pmap 查看进程真正使用的空间大小

pmap -x 1
Dirty 脏数据,表示处于修改,还未修改结束的数据

cat /proc/1/maps 直接查看内存状态,pmap 是把这里面的信息做整理后显示。

glances

远程监控主机状态

  • b: 以Byte为单位显示网卡数据速率
  • d: 关闭磁盘I/O模块
  • f /path/to/somefile: 设定输入文件位置
  • o {HTML|CSV}:输出格式
  • m: 禁用mount模块
  • n: 禁用网络模块
  • t #: 延迟时间间隔
  • 1:每个CPU的相关数据单独显示

如何开启glances
需要在被监控端,已服务器的形式开始
然后另一台机器,用glances 当客户端来连接该机器,即可查看主机状态
glances -s (以服务器的方式) -B 192.168.30.7 (绑定IP)
ss -ntl 查看端口监听
glances -c (以客户端的方式) 192.168.30.7 连接到该IP

dstat 需要yum 安装
dstat top-cpu 显示占用CPU最多的进程

kill 命令

进程管理命令,用于关闭进程,休眠进程,启动进程。

向进程发送控制信号,以实现对进程管理,每个信号对应一个数字,信号名称以SIG开头(可省略),不区分大小写,显示当前系统可用信号: kill –l,trap -l
常用信号:man 7 signal

  • 1) SIGHUP: 无须关闭进程而让其重读配置文件 (用于生产中环境,不能停止应用的情况下,但是有的时候可能会造成应用崩溃了。。。)
  • 2) SIGINT: 中止正在运行的进程;相当于Ctrl+c
  • 3) SIGQUIT:相当于ctrl+ (Ctrl +   也等同于ctrl +c 退出交互式程序)
  • 9) SIGKILL: 强制杀死正在运行的进程 (有可能丢失数据
  • 15) SIGTERM:终止正在运行的进程
  • 18) SIGCONT:继续运行
  • 19) SIGSTOP:后台休眠

指定信号的方法:

(1) 信号的数字标识:1, 2, 9

(2) 信号完整名称:SIGHUP

(3) 信号的简写名称:HUP

不是所有的进程都可以关闭的,有的时候需要使用强制删除
echo $$
mingetty 这个是Linux的登录进程,让用户可以在字符界面登录linux
再生进程 ,杀死后自动激活

实例
kill -1 4754 (httpd) 给httpd发送信号1,让他重新读取配置文件,并且不重启服务
kill 1234 结束1234这个进程
kill -9 1 杀死主进程,虽然杀不死,但是也 会造成子进程的破坏

killall

杀死所有名称匹配的进程,通常用于批量清理进程
killall sleep 删除所有sleep进程 ,killall 后面更的是进程名,不是pid

pkill

杀死特定进程
先用pgrep -t pts/0 查找进程
pgrep -at pts/0 查找 pts/0上的所有进程

pkill 针对进程来执行 ,支持正则表达式
pkill -t pts/0 杀掉pts/0全部进程
pkill -9 -t pts/0 强制杀死,可以用来踢人
pkill -9 -t pts/[012] 不能这样用!!!

作业控制

cmd + & 让程序保持后台执行

jobs 查看后台执行的命令

frontgroup

** fg # : # 代表作业编号,通过Jobs可以查看到,把指定的后台作业调回前台 **

ctrl + z 把命令放到后台,但是命令会处于停止状态

bg 1 启动后台命令 1 为jobs显示的后台队列ID

前台到后台 ctrl + z
后台休眠到后台运行 bg jobnumber
后台运行 cmd&
后台运行到前台运行 fg jobnumber
后台运行到后台休眠 killall -19 ping 发送19信号
后台休息到后台运行 killall -18 ping 发送18信号

jobs 只能看自己终端上运行的后台程序

作业虽然放到后台执行了,但是他还是与终端有关系的。当存放后台执行任务的网络中断,后台任务也会随着中断

如果需要后台程序与终端剥离,在终端断开的情况下,也继续执行,可以使用screen 剥离程序.
然后使用 screen -r ,恢复运行

nohub ping 127.1(代表127.0.0.1) &
nohub 执行的任务,核心就是网络断开后,会将这个后台程序,从子进程变成一个一级主进程。
nohub 只要有标准数据,就会把输出放到nohup.out文件中

作业控制:
fg [[%]JOB_NUM]:把指定的后台作业调回前台
bg [[%]JOB_NUM]:让送往后台的作业在后台继续运行
kill [%JOB_NUM]: 终止指定的作业

猜你喜欢

转载自www.cnblogs.com/ddz-linux/p/10467219.html