终端进程的前台和后台以及管理

终端进程的前台和后台以及管理

时间: 2015-02-28 21:37
作者: lsgxeva
分类:  工作学习>>linux>>terminal
摘要:  终端进程的前台和后台以及管理
标签:  终端 前台 后台 管理 结束 Linux tool command
提示: 文章均来自网络,版权为原作者所有,如有侵犯权益,请联络我们.

命令: kill, killall, pkill, xkill, skill, fuser, w, who, whoami, who am i, id, ps, pstree,  grep, pgrep, top, htop

jobs, fg, bg 命令
1、使进程恢复运行(后台)
1)使用命令bg
root@wyf-ubuntu:~# top
*** 终端上按"Ctrl+z"键 产生中断信号SIGSTOP 停止进程当前进程 ***

终端进程的前台和后台以及管理_第1张图片

root@wyf-ubuntu:~# bg

**** 此时top程序将在后台运行 但是如果当前终端退出 后台进程top也会结束 ****

root@wyf-ubuntu:~# exit


2)查看当前的暂停的进程
root@wyf-ubuntu:~# jobs

3)使用命令fg
root@wyf-ubuntu:~# fg %1
**** 将暂停的任务 job number 为1的任务 调至前台运行 ****
终端进程的前台和后台以及管理_第2张图片


小结:
1:挂起进程并放入后台 CTRL+Z 
2:查看当前暂停的任务 jobs
3:恢复任务 fg [job number](将后台程序放到前台)
fg %N 使第N个任务在前台运行
4:后台运行 bg [job number](将前台程序放到后台)
bg %N 使第N个任务在后台运行(%前有空格)
5:默认bg, fg不带%N时表示对最后一个进程操作!


Linux信号列表
执行 kill -l 查看信号和编码的对应关系。
终端进程的前台和后台以及管理_第3张图片

32) 33) 这两个信号没有 一共 62 个信号
9) SIGKILL 用来立即结束程序的运行. 本信号不能被阻塞, 处理和忽略.
19) SIGSTOP 停止(stopped)进程的执行. 注意它和terminate以及interrupt的区别: 该进程还未结束, 只是暂停执行. 本信号不能被阻塞, 处理或忽略.

以下条件可以产生一个信号
1、当用户按某些终端键时,将产生信号。
例如:
终端上按“Ctrl+c”组合键通常产生中断信号SIGINT、
终端上按"Ctrl+\"键通常产生中断信号SIGQUIT、
终端上按"Ctrl+z"键通常产生中断信号SIGSTOP。
17) SIGCHLD 子进程结束时, 父进程会收到这个信号,父进程默认忽略此信号,但是我们可以执行自定义信号处理函数,可以通过此信号判断子进程是否结束,然后配合wait()系统函数回收子函数的资源。
 
2、硬件异常将产生信号。
除数为0,无效的内存访问等。这些情况通常由硬件检测到,并通知内核,然后内核产生适当的信号发送给相应的进程。
 
3、软件异常将产生信号。
当检测到某种软件条件已发生,并将其通知有关进程时,产生信号。
 
4、调用kill函数将发送信号。
注意:接收信号进程和发送信号进程的所有者必须相同,或发送信号进程的所有者必须是超级用户。
一个进程可以调用kill函数结束自身进程或结束自身的子进程,也可以由子进程结束父进程,如果父进程先结束,则子进程会变成孤儿进程。
 
5、运行kill命令将发送信号。
此程序实际上是使用kill函数来发送信号。也常用此命令终止一个失控的后台进程。
 
一个进程收到一个信号的时候,可以用如下方法进行处理:
1、执行系统默认动作
对大多数信号来说,系统默认动作是用来终止该进程。  
2、忽略此信号
接收到此信号后没有任何动作。
3、执行自定义信号处理函数
用户定义的信号处理函数处理该信号。
注意:SIGKILL和SIGSTOP不能更改信号的处理方式,因为它们向用户提供了一种使进程终止的可靠方法。

Linux下查看支持的信号列表:
# kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE
9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2
13) SIGPIPE 14) SIGALRM 15) SIGTERM 17) SIGCHLD
18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN
22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO
30) SIGPWR 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1
36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4 39) SIGRTMIN+5
40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 43) SIGRTMIN+9
44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13
52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9
56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-5
60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1
64) SIGRTMAX

信号简要说明:
SIGHUP    终止进程    终端线路挂断
SIGINT    终止进程    中断进程
SIGQUIT   建立CORE文件终止进程,并且生成core文件
SIGILL   建立CORE文件      非法指令
SIGTRAP  建立CORE文件      跟踪自陷
SIGBUS   建立CORE文件      总线错误
SIGSEGV  建立CORE文件      段非法错误
SIGFPE   建立CORE文件      浮点异常
SIGIOT   建立CORE文件      执行I/O自陷
SIGKILL  终止进程    杀死进程
SIGPIPE  终止进程    向一个没有读进程的管道写数据
SIGALARM  终止进程    计时器到时
SIGTERM  终止进程    软件终止信号
SIGSTOP  停止进程    非终端来的停止信号
SIGTSTP  停止进程    终端来的停止信号
SIGCONT  忽略信号    继续执行一个停止的进程
SIGURG   忽略信号    I/O紧急信号
SIGIO    忽略信号    描述符上可以进行I/O
SIGCHLD  忽略信号    当子进程停止或退出时通知父进程
SIGTTOU  停止进程    后台进程写终端
SIGTTIN  停止进程    后台进程读终端
SIGXGPU  终止进程    CPU时限超时
SIGXFSZ  终止进程    文件长度过长
SIGWINCH  忽略信号    窗口大小发生变化
SIGPROF  终止进程    统计分布图用计时器到时
SIGUSR1  终止进程    用户定义信号1
SIGUSR2  终止进程    用户定义信号2
SIGVTALRM 终止进程    虚拟计时器到时

信号的详细说明:
1) SIGHUP 本信号在用户终端连接(正常或非正常)结束时发出, 通常是在终端的控制进程结束时, 通知同一session内的各个作业, 这时它们与控制终端不再关联.
2) SIGINT 程序终止(interrupt)信号, 在用户键入INTR字符(通常是Ctrl-C)时发出。
3) SIGQUIT 和SIGINT类似, 但由QUIT字符(通常是Ctrl-)来控制. 进程在因收到 
SIGQUIT退出时会产生core文件, 在这个意义上类似于一个程序错误信号.
4) SIGILL 执行了非法指令. 通常是因为可执行文件本身出现错误, 或者试图执行 
数据段. 堆栈溢出时也有可能产生这个信号.
5) SIGTRAP 由断点指令或其它trap指令产生. 由debugger使用.
6) SIGABRT 程序自己发现错误并调用abort时产生.
6) SIGIOT 在PDP-11上由iot指令产生, 在其它机器上和SIGABRT一样.
7) SIGBUS 非法地址, 包括内存地址对齐(alignment)出错. eg: 访问一个四个字长 的整数, 但其地址不是4的倍数.
8) SIGFPE 在发生致命的算术运算错误时发出. 不仅包括浮点运算错误, 还包括溢 
出及除数为0等其它所有的算术的错误.
9) SIGKILL 用来立即结束程序的运行. 本信号不能被阻塞, 处理和忽略.
10) SIGUSR1 留给用户使用
11) SIGSEGV 试图访问未分配给自己的内存, 或试图往没有写权限的内存地址写数据.
12) SIGUSR2 留给用户使用
13) SIGPIPE Broken pipe
14) SIGALRM 时钟定时信号, 计算的是实际的时间或时钟时间. alarm函数使用该信号.
15) SIGTERM 程序结束(terminate)信号, 与SIGKILL不同的是该信号可以被阻塞和处理. 通常用来要求程序自己正常退出. shell命令kill缺省产生这个信号.
17) SIGCHLD 子进程结束时, 父进程会收到这个信号.
18) SIGCONT 让一个停止(stopped)的进程继续执行. 本信号不能被阻塞. 可以用 一个handler来让程序在由stopped状态变为继续执行时完成特定的工作. 例如, 重新显示提示符。
19) SIGSTOP 停止(stopped)进程的执行. 注意它和terminate以及interrupt的区别: 该进程还未结束, 只是暂停执行. 本信号不能被阻塞, 处理或忽略.
20) SIGTSTP 停止进程的运行, 但该信号可以被处理和忽略. 用户键入SUSP字符时 (通常是Ctrl-Z)发出这个信号。
21) SIGTTIN 当后台作业要从用户终端读数据时, 该作业中的所有进程会收到SIGTTIN 信号. 缺省时这些进程会停止执行.
22) SIGTTOU 类似于SIGTTIN, 但在写终端(或修改终端模式)时收到.
23) SIGURG 有"紧急"数据或out-of-band数据到达socket时产生.
24) SIGXCPU 超过CPU时间资源限制. 这个限制可以由getrlimit/setrlimit来读取/ 改变
25) SIGXFSZ 超过文件大小资源限制.
26) SIGVTALRM 虚拟时钟信号. 类似于SIGALRM, 但是计算的是该进程占用的CPU时间.
27) SIGPROF 类似于SIGALRM/SIGVTALRM, 但包括该进程用的CPU时间以及系统调用的时间.
28) SIGWINCH 窗口大小改变时发出.
29) SIGIO 文件描述符准备就绪, 可以开始进行输入/输出操作.
30) SIGPWR Power failure 

有两个信号可以停止进程:SIGTERM和SIGKILL。
SIGTERM比较友好,进程能捕捉这个信号,根据您的需要来关闭程序。在关闭程序之前,您可以结束打开的记录文件和完成正在做的任务。在某些情况下,假如进程正在进行作业而且不能中断,那么进程可以忽略这个SIGTERM信号。
对于SIGKILL信号,进程是不能忽略的。这是一个 “我不管您在做什么,立刻停止”的信号。假如您发送SIGKILL信号给进程,Linux就将进程停止在那里。

结束Linux的指定进程
命令: kill, killall, pkill, xkill, skill, fuser, w, who, whoami, who am i, id, ps, pstree,  grep, pgrep, top, htop

id: 显示当前用户和用户组的 ID 
root@wyf-ubuntu:~# id --help
用法:id [选项]... [用户名]
显示指定用户或当前用户(当未指定用户时)的用户与组信息。

  -a 忽略,仅为与其他版本相兼容而设计
  -Z, --context 仅显示当前用户的安全环境
  -g, --group 仅显示有效的用户组ID
  -G, --groups 显示所有组的ID
  -n, --name 显示组名称而非数字,不与-ugG 一起使用
  -r, --real 显示真实ID 而非有效ID,与-ugG 一起使用
  -u, --user 仅显示有效用户ID
      --help 显示此帮助信息并退出
      --version 显示版本信息并退出

如果不附带任何选项,程序会显示一些可供识别用户身份的有用信息。

请向[email protected] 报告id 的错误
GNU coreutils 的主页:<http://www.gnu.org/software/coreutils/>
GNU 软件一般性帮助:<http://www.gnu.org/gethelp/>
请向<http://translationproject.org/team/zh_CN.html> 报告id 的翻译错误
要获取完整文档,请运行:info coreutils 'id invocation'

root@wyf-ubuntu:~# id


who: 显示目前登入系统的用户信息
root@wyf-ubuntu:~# who --help
用法:who [选项]... [ 文件 | 参数1 参数2 ]
显示当前已登录的用户信息。

  -a, --all 等于-b -d --login -p -r -t -T -u 选项的组合
  -b, --boot 上次系统启动时间
  -d, --dead 显示已死的进程
  -H, --heading 输出头部的标题列
      --ips         print ips instead of hostnames. with --lookup,
                    canonicalizes based on stored IP, if available,
                    rather than stored hostname
  -l,--login 显示系统登录进程
      --lookup 尝试通过 DNS 规范化主机名
  -m 只针对和标准输入有直接交互的主机和用户
  -p, --process 显示由 init 进程衍生的活动进程
  -q, --count 列出所有已登录用户的登录名与用户数量
  -r, --runlevel 显示当前的运行级别
  -s, --short 只显示名称、线路和时间(默认)
  -T, -w, --mesg 用+,- 或 ? 标注用户消息状态
  -u, --users 列出已登录的用户
      --message 等于-T
      --writable 等于-T
      --help 显示此帮助信息并退出
      --version 显示版本信息并退出

If FILE is not specified, use /var/run/utmp.  /var/log/wtmp as FILE is common.
If ARG1 ARG2 given, -m presumed: 'am i' or 'mom likes' are usual.

请向[email protected] 报告who 的错误
GNU coreutils 的主页:<http://www.gnu.org/software/coreutils/>
GNU 软件一般性帮助:<http://www.gnu.org/gethelp/>
请向<http://translationproject.org/team/zh_CN.html> 报告who 的翻译错误
要获取完整文档,请运行:info coreutils 'who invocation'

root@wyf-ubuntu:~# who -a
终端进程的前台和后台以及管理_第4张图片
root@wyf-ubuntu:~# who
终端进程的前台和后台以及管理_第5张图片
root@wyf-ubuntu:~# who -luT
终端进程的前台和后台以及管理_第6张图片

whoami: 显示当前的有效用户ID(操作用户)
root@wyf-ubuntu:~# whoami --help
用法:whoami [选项]...
显示与当前的有效用户ID 相关联的用户名。
与id -un 相同。

      --help 显示此帮助信息并退出
      --version 显示版本信息并退出

请向[email protected] 报告whoami 的错误
GNU coreutils 的主页:<http://www.gnu.org/software/coreutils/>
GNU 软件一般性帮助:<http://www.gnu.org/gethelp/>
请向<http://translationproject.org/team/zh_CN.html> 报告whoami 的翻译错误
要获取完整文档,请运行:info coreutils 'whoami invocation'

root@wyf-ubuntu:~# whoami


who am i : 显示的是实际用户的用户名,即用户登陆的时候的用户ID。此命令相当于who -m。
实际用户=uid,即user id。有效用户=euid,即effective user id
root@wyf-ubuntu:~# who am i


w: 显示目前登入系统的用户信息
root@wyf-ubuntu:~# w --help

Usage:
 w [options]

Options:
 -h, --no-header     do not print header  不显示各栏位的标题信息列
 -u, --no-current    ignore current process username   忽略执行程序的名称,以及该程序耗费CPU时间的信息
 -s, --short         short format   使用简洁格式列表,不显示用户登入时间,终端机阶段作业和程序所耗费的CPU时间
 -f, --from          show remote hostname field  开启或关闭显示用户从何处登入系统。
 -o, --old-style     old style output     老式风格的输出
 -i, --ip-addr       display IP address instead of hostname (if possible)  显示ip地址而不是显示主机名(如果可能的话)

     --help     display this help and exit   显示帮助信息并退出
 -V, --version  output version information and exit   显示版本信息

For more details see w(1).

root@wyf-ubuntu:~# w
终端进程的前台和后台以及管理_第7张图片
USER —登录的用户名
TTY   —登录后系统分配的终端号
FROM—远程主机名,即从哪儿登录来的
LOGIN@—何时登录
IDLE—空闲了多长时间,表示用户闲置的时间。这是一个计时器,一旦用户执行任何操作,该计时器便会被重置
JCPU—和该终端(tty)连接的所有进程占用的时间,这个时间里并不包括过去的后台作业时间,但却包括当前正在运行的后台作业所占用的时间
PCPU—指当前进程(即在WHAT项中显示的进程)所占用的时间
WHAT—当前正在运行进程的命令行
例如:
user3     pts/39  192.168.0.5    07Jul13  2:11m  1.62s  1.58s ssh 10.1.1.2
user3用户2013年7月7日从IP 192.168.0.5登录到本机,终端号pts/39,已经2小时11分没有操作了,登录后其所有进程占用CPU时间1.62秒,当前执行的程序是ssh 10.1.1.2,占用CPU时间1.58秒

# echo $$                            # The PID of your shell

# history | tail -50                 # 显示最后50个使用过的命令

ps: 获取所有正在运行的进程列表
root@wyf-ubuntu:~# ps --help

Usage:
 ps [options]

 Try 'ps --help <simple|list|output|threads|misc|all>'
  or 'ps --help <s|l|o|t|m|a>'
 for additional help text.

For more details see ps(1).

     Linux中的ps命令是Process Status的缩写。ps命令用来列出系统中当前运行的那些进程。ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信息,就可以使用top命令。
要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程,而 ps 命令就是最基本同时也是非常强大的进程查看命令。使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等。总之大部分信息都是可以通过执行该命令得到的。

ps 为我们提供了进程的 一次性的查看,它所提供的查看结果并不动态连续的;如果想对进程时间监控,应该用 top 工具。
kill 命令用于杀死进程。

linux上进程有5种状态: 
1. 运行(正在运行或在运行队列中等待) 
2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号) 
3. 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生) 
4. 僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放) 
5. 停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行) 

ps工具标识进程的5种状态码: 
D 不可中断 uninterruptible sleep (usually IO) 
R 运行 runnable (on run queue) 
S 中断 sleeping 
T 停止 traced or stopped 
Z 僵死 a defunct (”zombie”) process 

1.命令格式: ps[参数]
2.命令功能: 用来显示当前进程的状态
3.命令参数:
a  显示所有进程
-a 显示同一终端下的所有程序
-A 显示所有进程
c  显示进程的真实名称
-N 反向选择
-e 等于“-A”
e  显示环境变量
f  显示程序间的关系
-H 显示树状结构
r  显示当前终端的进程
T  显示当前终端的所有程序
u  指定用户的所有进程
-au 显示较详细的资讯
-aux 显示所有包含其他使用者的行程 
-C<命令> 列出指定命令的状况
--lines<行数> 每页显示的行数
--width<字符数> 每页显示的字符数
--help 显示帮助信息
--version 显示版本显示

# ps -auxefw                         # 所有正在运行进程的详尽列表

root@wyf-ubuntu:~# ps -a      # 显示当前用户所有进程信息


root@wyf-ubuntu:~# ps -u root      # 显示指定用户的进程信息
终端进程的前台和后台以及管理_第8张图片


root@wyf-ubuntu:~# ps -ef      # 显示所有进程信息,连同命令行
终端进程的前台和后台以及管理_第9张图片

root@wyf-ubuntu:~# ps -ef | grep ssh      # ps与grep 常用组合用法,查找特定进程


root@wyf-ubuntu:~# ps -l      # 将目前属于您自己这次登入的 PID 与相关信息列示出来

说明:
各相关信息的意义:
F 代表这个程序的旗标 (flag), 4 代表使用者为 super user
S 代表这个程序的状态 (STAT),关于各 STAT 的意义将在内文介绍
UID 程序被该 UID 所拥有
PID 就是这个程序的 ID !
PPID 则是其上级父程序的ID
C CPU 使用的资源百分比
PRI 这个是 Priority (优先执行序) 的缩写,详细后面介绍
NI 这个是 Nice 值,在下一小节我们会持续介绍
ADDR 这个是 kernel function,指出该程序在内存的那个部分。如果是个 running的程序,一般就是 "-"
SZ 使用掉的内存大小
WCHAN 目前这个程序是否正在运作当中,若为 - 表示正在运作
TTY 登入者的终端机位置
TIME 使用掉的 CPU 时间。
CMD 所下达的指令为何
在预设的情况下, ps 仅会列出与目前所在的 bash shell 有关的 PID 而已,所以, 当我使用 ps -l 的时候,只有三个 PID。

root@wyf-ubuntu:~# ps aux      # 列出目前所有的正在内存当中的程序
终端进程的前台和后台以及管理_第10张图片
说明:
USER:该 process 属于那个使用者账号的
PID :该 process 的号码
%CPU:该 process 使用掉的 CPU 资源百分比
%MEM:该 process 所占用的物理内存百分比
VSZ :该 process 使用掉的虚拟内存量 (Kbytes)
RSS :该 process 占用的固定的内存量 (Kbytes)
TTY :该 process 是在那个终端机上面运作,若与终端机无关,则显示 ?,另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。
STAT:该程序目前的状态,主要的状态有
R :该程序目前正在运作,或者是可被运作
S :该程序目前正在睡眠当中 (可说是 idle 状态),但可被某些讯号 (signal) 唤醒。
T :该程序目前正在侦测或者是停止了
Z :该程序应该已经终止,但是其父程序却无法正常的终止他,造成 zombie (疆尸) 程序的状态
START:该 process 被触发启动的时间
TIME :该 process 实际使用 CPU 运作的时间
COMMAND:该程序的实际指令

root@wyf-ubuntu:~# ps -axjf     # 列出类似程序树的程序显示
终端进程的前台和后台以及管理_第11张图片

root@wyf-ubuntu:~# ps aux | egrep '(cron|syslog)'    # 找出与 cron 与 syslog 这两个服务有关的 PID 号码
                                                                                            # egrep效果与grep -E相同,即扩展的grep,允许使用正则表达.


root@wyf-ubuntu:~# ps -aux | more     # 用 | 管道和 more 连接起来分页查看

root@wyf-ubuntu:~# ps -aux > ps001.txt     # 把所有进程显示出来,并输出到ps001.txt文件

root@wyf-ubuntu:~# ps -o pid,ppid,pgrp,session,tpgid,comm     # 输出指定的字段



pstree 以树状图显示进程间的关系
Usage: pstree [ -a ] [ -c ] [ -h | -H PID ] [ -l ] [ -n ] [ -p ] [ -g ] [ -u ]
              [ -A | -G | -U ] [ PID | USER ]
       pstree -V
Display a tree of processes.

  -a, --arguments     show command line arguments
  -A, --ascii         use ASCII line drawing characters
  -c, --compact       don't compact identical subtrees
  -h, --highlight-all highlight current process and its ancestors
  -H PID,
  --highlight-pid=PID highlight this process and its ancestors
  -g, --show-pgids    show process group ids; implies -c
  -G, --vt100         use VT100 line drawing characters
  -l, --long          don't truncate long lines
  -n, --numeric-sort  sort output by PID
  -p, --show-pids     show PIDs; implies -c
  -s, --show-parents  show parents of the selected process
  -u, --uid-changes   show uid transitions
  -U, --unicode       use UTF-8 (Unicode) line drawing characters
  -V, --version       display version information
  PID    start at this PID; default is 1 (init)
  USER   show only trees rooted at processes of this user

参数:
-a  显示出该命令的参数, 假如这个命令进程被其他进程替换掉, 那么进程将显示在括号中 -a 选项包含有压实进程树的选项, 对于相同的进程, 会使用n*(process)的形式展显出来。
-c     关闭禁用显示结果进程树,在默认情况下,进程子树是会被压缩的。不管有多少进程名相同的进程,都会逐个显示出来。
-G    使用vt100线性描述树
-h     突空出显示当前进程的父进程并高亮显示出来,如果没有父进程那么什么都不会显示。
-H     突出显示出指定进程的父进程信息并高亮显示出来,使用方法为 pstree  -H  PID
-l      显示长格式命令选项,在默认的情况下,命令行最多显示宽度为132bit  ,超过将不能正常显示。
-n  基于进程相同的祖先来进行排序,可以命名pid来代替进程名称 。
-p    显示所有的时程,显示结果包含进程名和进程ID
-u    显示出用户的UID,无论何时,这个UID和进程比较UID参数,这个新的UID将在进程名后显示不同的参数。
-U  使用utf-8字符集以十进制表示,
-v     显示版本号

root@wyf-ubuntu:~/code# pstree -aclp    # 以长格式显示所有进程名和进程id且不压缩子进程
终端进程的前台和后台以及管理_第12张图片

root@wyf-ubuntu:~/code# pstree -H 1074    # 突出显示出指定进程的父进程信息并高亮显示出来
终端进程的前台和后台以及管理_第13张图片


grep : 在文本中搜索符合条件的字符串
root@wyf-ubuntu:~/code# grep --help
用法: grep [选项]... PATTERN [FILE]...
在每个 FILE 或是标准输入中查找 PATTERN。
默认的 PATTERN 是一个基本正则表达式(缩写为 BRE)。
例如: grep -i 'hello world' menu.h main.c

正则表达式选择与解释:
  -E, --extended-regexp     PATTERN 是一个可扩展的正则表达式(缩写为 ERE)
  -F, --fixed-strings       PATTERN 是一组由断行符分隔的定长字符串。
  -G, --basic-regexp        PATTERN 是一个基本正则表达式(缩写为 BRE)
  -P, --perl-regexp         PATTERN 是一个 Perl 正则表达式
  -e, --regexp=PATTERN      用 PATTERN 来进行匹配操作
  -f, --file=FILE           从 FILE 中取得 PATTERN
  -i, --ignore-case         忽略大小写
  -w, --word-regexp         强制 PATTERN 仅完全匹配字词
  -x, --line-regexp         强制 PATTERN 仅完全匹配一行
  -z, --null-data           一个 0 字节的数据行,但不是空行

杂项:
  -s, --no-messages         不显示错误信息
  -v, --invert-match        选中不匹配的行
  -V, --version             显示版本信息并退出
      --help                显示此帮助并退出
      --mmap                忽略向后兼容性

输出控制:
  -m, --max-count=NUM       NUM 次匹配后停止
  -b, --byte-offset         输出的同时打印字节偏移
  -n, --line-number         输出的同时打印行号
      --line-buffered       每行输出清空
  -H, --with-filename       为每一匹配项打印文件名
  -h, --no-filename         输出时不显示文件名前缀
      --label=LABEL         将LABEL 作为标准输入文件名前缀
  -o, --only-matching       show only the part of a line matching PATTERN
  -q, --quiet, --silent     suppress all normal output
      --binary-files=TYPE   assume that binary files are TYPE;
                            TYPE is 'binary', 'text', or 'without-match'
  -a, --text                equivalent to --binary-files=text
  -I                        equivalent to --binary-files=without-match
  -d, --directories=ACTION  how to handle directories;
                            ACTION is 'read', 'recurse', or 'skip'
  -D, --devices=ACTION      how to handle devices, FIFOs and sockets;
                            ACTION is 'read' or 'skip'
  -r, --recursive           like --directories=recurse
  -R, --dereference-recursive  likewise, but follow all symlinks
      --include=FILE_PATTERN  只查找匹配FILE_PATTERN 的文件
      --exclude=FILE_PATTERN  跳过匹配FILE_PATTERN 的文件和目录
      --exclude-from=FILE   跳过所有除FILE 以外的文件
      --exclude-dir=PATTERN  跳过所有匹配PATTERN 的目录。
  -L, --files-without-match  只打印不匹配FILEs 的文件名
  -l, --files-with-matches  只打印匹配FILES 的文件名
  -c, --count               只打印每个FILE 中的匹配行数目
  -T, --initial-tab         行首tabs 分隔(如有必要)
  -Z, --null                在FILE 文件最后打印空字符

文件控制:
  -B, --before-context=NUM  打印以文本起始的NUM 行
  -A, --after-context=NUM   打印以文本结尾的NUM 行
  -C, --context=NUM         打印输出文本NUM 行
  -NUM                      same as --context=NUM
      --color[=WHEN],
      --colour[=WHEN]       use markers to highlight the matching strings;
                            WHEN is 'always', 'never', or 'auto'
  -U, --binary              do not strip CR characters at EOL (MSDOS/Windows)
  -u, --unix-byte-offsets   report offsets as if CRs were not there
                            (MSDOS/Windows)

‘egrep’即‘grep -E’。‘fgrep’即‘grep -F’。
直接使用‘egrep’或是‘fgrep’均已不可行了。
若FILE 为 -,将读取标准输入。不带FILE,读取当前目录,除非命令行中指定了-r 选项。
如果少于两个FILE 参数,就要默认使用-h 参数。
如果有任意行被匹配,那退出状态为 0,否则为 1;
如果有错误产生,且未指定 -q 参数,那退出状态为 2。

请将错误报告给: [email protected]
GNU Grep 主页: <http://www.gnu.org/software/grep/>
GNU 软件的通用帮助: <http://www.gnu.org/gethelp/>     

Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。
grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到标准输出,不影响原文件内容。
grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。
1.命令格式:
grep [option] pattern file
2.命令功能:
用于过滤/搜索的特定字符。可使用正则表达式能多种命令配合使用,使用上十分灵活。
3.命令参数:
-a   --text   #不要忽略二进制的数据。   
-A<显示行数>   --after-context=<显示行数>   #除了显示符合范本样式的那一列之外,并显示该行之后的内容。   
-b   --byte-offset   #在显示符合样式的那一行之前,标示出该行第一个字符的编号。   
-B<显示行数>   --before-context=<显示行数>   #除了显示符合样式的那一行之外,并显示该行之前的内容。   
-c    --count   #计算符合样式的列数。   
-C<显示行数>    --context=<显示行数>或-<显示行数>   #除了显示符合样式的那一行之外,并显示该行之前后的内容。   
-d <动作>      --directories=<动作>   #当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。   
-e<范本样式>  --regexp=<范本样式>   #指定字符串做为查找文件内容的样式。   
-E      --extended-regexp   #将样式为延伸的普通表示法来使用。   
-f<规则文件>  --file=<规则文件>   #指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。   
-F   --fixed-regexp   #将样式视为固定字符串的列表。   
-G   --basic-regexp   #将样式视为普通的表示法来使用。   
-h   --no-filename   #在显示符合样式的那一行之前,不标示该行所属的文件名称。   
-H   --with-filename   #在显示符合样式的那一行之前,表示该行所属的文件名称。   
-i    --ignore-case   #忽略字符大小写的差别。   
-l    --file-with-matches   #列出文件内容符合指定的样式的文件名称。   
-L   --files-without-match   #列出文件内容不符合指定的样式的文件名称。   
-n   --line-number   #在显示符合样式的那一行之前,标示出该行的列数编号。   
-q   --quiet或--silent   #不显示任何信息。   
-r   --recursive   #此参数的效果和指定“-d recurse”参数相同。   
-s   --no-messages   #不显示错误信息。   
-v   --revert-match   #显示不包含匹配文本的所有行。   
-V   --version   #显示版本信息。   
-w   --word-regexp   #只显示全字符合的列。   
-x    --line-regexp   #只显示全列符合的列。   
-y   #此参数的效果和指定“-i”参数相同。
  
4.规则表达式:
grep的规则表达式:
^  #锚定行的开始 如:'^grep'匹配所有以grep开头的行。    
$  #锚定行的结束 如:'grep$'匹配所有以grep结尾的行。    
.  #匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p。    
*  #匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行。    
.*   #一起用代表任意字符。   
[]   #匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。    
[^]  #匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。    
\(..\)  #标记匹配字符,如'\(love\)',love被标记为1。    
\<      #锚定单词的开始,如:'\<grep'匹配包含以grep开头的单词的行。    
\>      #锚定单词的结束,如'grep\>'匹配包含以grep结尾的单词的行。    
x\{m\}  #重复字符x,m次,如:'0\{5\}'匹配包含5个o的行。    
x\{m,\}  #重复字符x,至少m次,如:'o\{5,\}'匹配至少有5个o的行。    
x\{m,n\}  #重复字符x,至少m次,不多于n次,如:'o\{5,10\}'匹配5--10个o的行。   
\w    #匹配文字和数字字符,也就是[A-Za-z0-9],如:'G\w*p'匹配以G后跟零个或多个文字或数字字符,然后是p。   
\W    #\w的反置形式,匹配一个或多个非单词字符,如点号句号等。   
\b    #单词锁定符,如: '\bgrep\b'只匹配grep。  

POSIX字符:
为了在不同国家的字符编码中保持一至,POSIX(The Portable Operating System Interface)增加了特殊的字符类,如[:alnum:]是[A-Za-z0-9]的另一个写法。要把它们放到[]号内才能成为正则表达式,如[A- Za-z0-9]或[[:alnum:]]。在linux下的grep除fgrep外,都支持POSIX的字符类。
[:alnum:]    #文字数字字符   
[:alpha:]    #文字字符   
[:digit:]    #数字字符   
[:graph:]    #非空字符(非空格、控制字符)   
[:lower:]    #小写字符   
[:cntrl:]    #控制字符   
[:print:]    #非空字符(包括空格)   
[:punct:]    #标点符号   
[:space:]    #所有空白字符(新行,空格,制表符)   
[:upper:]    #大写字符   
[:xdigit:]   #十六进制数字(0-9,a-f,A-F)  

root@wyf-ubuntu:~/code# ps -waux | grep ssh    # 查找指定进程


root@wyf-ubuntu:~/code# ps -waux | grep ssh  -c    #  计算符合样式的列数


root@wyf-ubuntu:~/code# cat test.txt | grep -nf test2.txt   # 从文件中读取关键词进行搜索并显示结果所在 行号
终端进程的前台和后台以及管理_第14张图片

root@wyf-ubuntu:~/code# grep -ni 'Linux' test.txt   # 从文件中查找关键词忽略大小写并显示行号


root@wyf-ubuntu:~/code# grep -ni 'Linux' test.txt   # 从多个文件中查找关键词忽略大小写并显示行号


root@wyf-ubuntu:~/code# ps -waux | grep ssh | grep -v "grep"   #  grep不显示本身进程
终端进程的前台和后台以及管理_第15张图片

root@wyf-ubuntu:~/code# cat test.txt | grep ^u       #  找出已u开头的行内容


root@wyf-ubuntu:~/code# cat test.txt | grep -n ^[^u]       #  找出已u开头的行内容
终端进程的前台和后台以及管理_第16张图片

root@wyf-ubuntu:~/code# cat test.txt | grep -n hat$     # 输出以hat结尾的行内容


root@wyf-ubuntu:~/code# cat test.txt | grep -nE "ed|at"    # 显示包含ed或者at字符的内容行


root@wyf-ubuntu:~/code# grep -n '[a-z]\{7\}' *.txt    # 显示当前目录下面以.txt 结尾的文件中的所有包含每个字符串至少有7个连续小写字符的字符串的行



pgrep : 通过匹配其程序名,找到匹配的进程
root@wyf-ubuntu:~/code# pgrep --help

Usage:
 pgrep [options] <pattern>

Options:
 -d, --delimiter <string>  specify output delimiter
 -l, --list-name           list PID and process name
 -v, --inverse             negates the matching
 -w, --lightweight         list all TID
 -c, --count               count of matching processes
 -f, --full                use full process name to match
 -g, --pgroup <id,...>     match listed process group IDs
 -G, --group <gid,...>     match real group IDs
 -n, --newest              select most recently started
 -o, --oldest              select least recently started
 -P, --parent <ppid,...>   match only child processes of the given parent
 -s, --session <sid,...>   match session IDs
 -t, --terminal <tty,...>  match by controlling terminal
 -u, --euid <id,...>       match by effective IDs
 -U, --uid <id,...>        match by real IDs
 -x, --exact               match exactly with the command name
 -F, --pidfile <file>      read PIDs from file
 -L, --logpidfile          fail if PID file is not locked
 --ns <pid>                match the processes that belong to the same
                           namespace as <pid>
 --nslist <ns,...>         list which namespaces will be considered for
                           the --ns option.
                           Available namespaces: ipc, mnt, net, pid, user, uts

 -h, --help     display this help and exit
 -V, --version  output version information and exit

For more details see pgrep(1).

重要选项
-l  同时显示进程名和PID
-o 当匹配多个进程时,显示进程号最小的那个
-n 当匹配多个进程时,显示进程号最大的那个
注:进程号越大,并不一定意味着进程的启动时间越晚

root@wyf-ubuntu:~/code# pgrep -l sshd    # 同时显示PID和ProcessName



top: 动态观察程序的变化
root@wyf-ubuntu:~/code# top --help
top: inappropriate '-help'
Usage:
  top -hv | -bcHiOSs -d secs -n max -u|U user -p pid(s) -o field -w [cols]

    top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。下面详细介绍它的使用方法。top是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止该程序为止.比较准确的说,top命令提供了实时的对系统处理器的状态监视.它将显示系统中CPU最“敏感”的任务列表.该命令可以按CPU使用.内存使用和执行时间对任务进行排序;而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定.
1.命令格式:
          top [参数]
2.命令功能:
          显示当前系统正在执行的进程的相关信息,包括进程ID、内存占用率、CPU占用率等
3.命令参数:
-b 批处理
-c 显示完整的治命令
-I 忽略失效过程
-s 保密模式
-S 累积模式
-i<时间> 设置间隔时间
-u<用户名> 指定用户名
-p<进程号> 指定进程
-n<次数> 循环显示的次数


root@wyf-ubuntu:~/code# top
终端进程的前台和后台以及管理_第17张图片

说明:
统计信息区:
前五行是当前系统情况整体的统计信息区。下面我们看每一行信息的具体意义。

top  - 14:06:23 up 70 days, 16:44,  2 users,  load average: 1.25, 1.32, 1.35
第一行,任务队列信息,同 uptime 命令的执行结果,具体参数说明情况如下:
top - 14:10:46— 当前系统时间
up 70 days, 16:44 — 系统已经运行了70天16小时44分钟(在这期间系统没有重启过的吆!)
2 users — 当前有2个用户登录系统
load average: 1.15, 1.42, 1.44 — load average后面的三个数分别是1分钟、5分钟、15分钟的负载情况。
load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了。

Tasks:  206 total,   1 running, 205 sleeping,   0 stopped,   0  zombie
第二行,Tasks — 任务(进程),具体信息说明如下:
系统现在共有206个进程,其中处于运行中的有1个,205个在休眠(sleep),stoped状态的有0个,zombie状态(僵尸)的有0个。

Cpu(s):   5.9%us,  3.4%sy,  0.0%ni, 90.4%id,  0.0%wa,  0.0%hi,  0.2%si,  0.0% st
第三行,cpu状态信息,具体属性说明如下:
5.9%us — 用户空间占用CPU的百分比。
3.4% sy — 内核空间占用CPU的百分比。
0.0% ni — 改变过优先级的进程占用CPU的百分比
90.4% id — 空闲CPU百分比
0.0% wa — IO等待占用CPU的百分比
0.0% hi — 硬中断(Hardware IRQ)占用CPU的百分比
0.2% si — 软中断(Software Interrupts)占用CPU的百分比
0.0% st  — 
备注:在这里CPU的使用比率和windows概念不同,需要理解linux系统用户空间和内核空间的相关知识!

Mem:  32949016k total, 14411180k used, 18537836k free,   169884k buffers
第四行,内存状态,具体信息如下:
32949016k total — 物理内存总量(32GB)
14411180k used — 使用中的内存总量(14GB)
18537836k free — 空闲内存总量(18GB)
169884k buffers — 缓存的内存量 (169M)

Swap: 32764556k total,        0k used, 32764556k free,  3612636k cached
第五行,swap交换分区信息,具体信息说明如下:
32764556k total — 交换区总量(32GB)
0k used — 使用的交换区总量(0K)
32764556k free — 空闲交换区总量(32GB)
3612636k cached — 缓冲的交换区总量(3.6GB)
备注:
第四行中使用中的内存总量(used)指的是现在系统内核控制的内存数,空闲内存总量(free)是内核还未纳入其管控范围的数量。纳入内核管理的内存不见得都在使用中,还包括过去使用过的现在可以被重复利用的内存,内核并不把这些可被重新使用的内存交还到free中去,因此在linux上free内存会越来越少,但不用为此担心。
如果出于习惯去计算可用内存数,这里有个近似的计算公式: 第四行的free + 第四行的buffers + 第五行的cached,按这个公式此台服务器的可用内存:18537836k +169884k +3612636k = 22GB左右。
对于内存监控,在top里我们要时刻监控第五行swap交换分区的used,如果这个数值在不断的变化,说明内核在不断进行内存和swap的数据交换,这是真正的内存不够用了。
第六行,空行。

 PID USER      PR  NI  VIRT  RES  SHR S  %CPU %MEM    TIME+   COMMAND 
第七行以下:各进程(任务)的状态监控,项目列信息说明如下:
PID — 进程id
USER — 进程所有者
PR — 进程优先级
NI — nice值。负值表示高优先级,正值表示低优先级
VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR — 共享内存大小,单位kb
S — 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
%CPU — 上次更新到现在的CPU时间占用百分比
%MEM — 进程使用的物理内存百分比
TIME+ — 进程使用的CPU时间总计,单位1/100秒
COMMAND — 进程名称(命令名/命令行)

Linux中的进程优先级[ni和pri]
进程cpu资源分配就是指进程的优先权(priority)。优先权高的进程有优先执行权利。配置进程优先权对多任务环境的Linux很有用,可以改善系统性能。还可以把进程运行到指定的CPU上,这样一来,把不重要的进程安排到某个CPU,可以大大改善系统整体性能。 

一、先看系统进程: 
PR 就是 Priority 的简写,而 NI 是 nice 的简写。这两个值决定了PR的值, PR越 小 ,进程优先权就越 高 ,就越“优先执行”。换算公式为: PR(new) = PR(old) + NI 
--------------------------------------------------------------------------- 

二、修改进程优先级的命令主要有两个:nice,renice 
每个进程都有两个影响其调度的值:
第一个是 动态值,内核经常更改这个值,也就是ps -l命令里的pri值
第二个是 静态值,只是偶尔被用户手工更改,即ps -l里的ni值。对任何进程而言,ni这个值可以从-20到19不等,其中数值越小优先级越高,数值越大优先级越低,
-20的优先级最高,19的优先级最低,需要注意的是普通用户只能在0~19之间调整应用程序的优先权值,只有超级用户有权调整更高的优先权值(从-20~19)。

PRI即进程的优先级,此值越小进程的优先级别越高。而NI,也就是我们所要说的nice值(通过nice命令设置),其表示 进程可被执行的优先级的修正数值。如前面所说,PRI值越小越快被执行,那么加入nice值后,将会使得PRI变为:PRI(new)=PRI(old)+nice。
所以,nice命令设置的优先级不是程序最终的优先级,而只是优先级的修正数值。

到目前为止,更需要强调一点的是,进程的nice值不是进程的优先级,他们不是一个概念,但是进程nice值会影响到进程的优先级变化。
—————————————————————————
二、修改进程优先级的命令主要有两个:nice,renice

1、一开始执行程序就指定nice值:nice
nice -n -5 /usr/local/mysql/bin/mysqld_safe &

linux nice 命令详解
功能说明:设置优先权。
语  法:nice [-n <优先等级>][--help][--version][执行指令]
补充说明:nice指令可以改变程序执行的优先权等级。
参  数:-n<优先等级>或-<优先等级>或–adjustment=<优先等级>  设置欲执行的指令的优先权等级。等级的范围从-20-19,其中-20最高,19最低,只有系统管理者可以设置负数的等级。
–help  在线帮助。
–version  显示版本信息。

2、调整已存在进程的nice:renice
renice -5 -p 5200
#PID为5200的进程nice设为-5

linux renice 命令详解
功能说明:调整优先权。
语  法:renice [优先等级][-g <程序群组名称>...][-p <程序识别码>...][-u <用户名称>...]
补充说明:renice指令可重新调整程序执行的优先权等级。预设是以程序识别码指定程序调整其优先权,您亦可以指定程序群组或用户名称调整优先权等级,并修改所有隶属于该程序群组或用户的程序的优先权。等级范围从-20–19,只有系统管理者可以改变其他用户程序的优先权,也仅有系统管理者可以设置负数等级。
参  数:
-g <程序群组名称>  使用程序群组名称,修改所有隶属于该程序群组的程序的优先权。
-p <程序识别码>  改变该程序的优先权等级,此参数为预设值。
-u <用户名称>  指定用户名称,修改所有隶属于该用户的程序的优先权。

3、也可以用top命令更改已存在进程的nice:
top
#进入top后按“r”–>输入进程PID–>输入nice值

使用技巧:
    
Help for Interactive Commands - procps-ng version 3.3.9
Window 1:Def: Cumulative mode Off.  System: Delay 3.0 secs; Secure mode Off.

  Z,B,E,e   Global: 'Z' colors; 'B' bold; 'E'/'e' summary/task memory scale
  l,t,m     Toggle Summary: 'l' load avg; 't' task/cpu stats; 'm' memory info
  0,1,2,3,I Toggle: '0' zeros; '1/2/3' cpus or numa node views; 'I' Irix mode
  f,F,X     Fields: 'f'/'F' add/remove/order/sort; 'X' increase fixed-width

  L,&,<,> . Locate: 'L'/'&' find/again; Move sort column: '<'/'>' left/right
  R,H,V,J . Toggle: 'R' Sort; 'H' Threads; 'V' Forest view; 'J' Num justify
  c,i,S,j . Toggle: 'c' Cmd name/line; 'i' Idle; 'S' Time; 'j' Str justify
  x,y     . Toggle highlights: 'x' sort field; 'y' running tasks
  z,b     . Toggle: 'z' color/mono; 'b' bold/reverse (only if 'x' or 'y')
  u,U,o,O . Filter by: 'u'/'U' effective/any user; 'o'/'O' other criteria
  n,#,^O  . Set: 'n'/'#' max tasks displayed; Show: Ctrl+'O' other filter(s)
  C,...   . Toggle scroll coordinates msg for: up,down,left,right,home,end

  k,r       Manipulate tasks: 'k' kill; 'r' renice
  d or s    Set update interval
  W,Y       Write configuration file 'W'; Inspect other output 'Y'
  q         Quit
          ( commands shown with '.' require a visible task display window ) 
Press 'h' or '?' for help with Windows,
Type 'q' or <Esc> to continue 

1.多U多核CPU监控


按数字键1可以在显示每个CPU核心和整个CPU状态间切换。


按数字键2可以在显示和不显示Node状态间切换。


按数字键3可以手动指定node块。

2.高亮显示当前运行进程
敲击键盘“b”(打开/关闭加亮效果),top的视图变化如下:
  加亮
   未加亮
        敲击键盘“y”(打开/关闭运行态进程的加亮效果),top的视图变化如下:
  加亮
 未加亮
          敲击键盘“x”(打开/关闭排序列的加亮效果),top的视图变化如下:
终端进程的前台和后台以及管理_第18张图片

终端进程的前台和后台以及管理_第19张图片
可以看到,top默认的排序列是“%CPU”。

3. 通过”shift + >”或”shift + <”可以向右或左改变排序列,下图是按一次”shift + >”的效果图:

终端进程的前台和后台以及管理_第20张图片

按一次”shift + >”的效果图。
视图现在已经按照%MEM来排序了。

改变进程显示字段
1. 敲击“f”键,top进入另一个视图,在这里可以编排基本视图中的显示字段:
终端进程的前台和后台以及管理_第21张图片
这里列出了所有可在top基本视图中显示的进程字段,有”*”并且标注为大写字母的字段是可显示的,没有”*”并且是小写字母的字段是不显示的。如果要在基本视图中显示“CODE”和“DATA”两个字段,可以通过敲击“r”和“s”键:

终端进程的前台和后台以及管理_第22张图片


实例2:显示 完整命令
命令:
    top -c
输出:
       终端进程的前台和后台以及管理_第23张图片

说明:

实例3:以批处理模式显示程序信息
命令:
    top -b
输出:
     终端进程的前台和后台以及管理_第24张图片
说明:

实例4:以累积模式显示程序信息
命令:
    top -S
输出:
     终端进程的前台和后台以及管理_第25张图片
说明:

实例5:设置信息更新次数
命令:
  top -n 2
输出:
   终端进程的前台和后台以及管理_第26张图片
说明:
表示更新两次后终止更新显示

实例6:设置信息更新时间
命令:
    top -d 3
输出:
     终端进程的前台和后台以及管理_第27张图片
说明:
表示更新周期为3秒

实例7:显示指定的进程信息
命令:
    top -p 1132
输出:
     终端进程的前台和后台以及管理_第28张图片
说明:


5.top交互命令
    在top 命令执行过程中可以使用的一些交互命令。这些命令都是单字母的,如果在命令行中使用了s 选项, 其中一些命令可能会被屏蔽。
h 显示帮助画面,给出一些简短的命令总结说明
k 终止一个进程。
i 忽略闲置和僵死进程。这是一个开关式命令。
q 退出程序
r 重新安排一个进程的优先级别
S 切换到累计模式
s 改变两次刷新之间的延迟时间(单位为s),如果有小数,就换算成m s。
          输入0值则系统将不断刷新,默认值是5 s
f或者F 从当前显示中添加或者删除项目
o或者O 改变显示项目的顺序
l 切换显示平均负载和启动时间信息
m 切换显示内存信息
t 切换显示进程和CPU状态信息
c 切换显示命令名称和完整命令行
M 根据驻留内存大小进行排序
P 根据CPU使用百分比大小进行排序
T 根据时间/累计时间进行排序
W 将当前设置写入~/.toprc文件中 
 

top命令的补充:
    top命令是Linux上进行系统监控的首选命令,但有时候却达不到我们的要求,比如当前这台服务器,top监控有很大的局限性。这台服务器运行着websphere集群,有两个节点服务,就是【top视图 01】中的老大、老二两个java进程, top命令的监控最小单位是进程,所以看不到我关心的java线程数和客户连接数,而这两个指标是java的web服务非常重要的指标,通常我用ps和netstate两个命令来补充top的不足。

监控java线程数:
ps -eLf | grep java | wc -l

监控网络客户连接数:
netstat -n | grep tcp | grep 侦听端口 | wc -l

上面两个命令,可改动grep的参数,来达到更细致的监控要求。
在Linux系统“一切都是文件”的思想贯彻指导下,所有进程的运行状态都可以用文件来获取。系统根目录/proc中,每一个数字子目录的名字都是运行中的进程的PID,进入任一个进程目录,可通过其中文件或目录来观察进程的各项运行指标,例如task目录就是用来描述进程中线程的,因此也可以通过下面的方法获取某进程中运行中的线程数量(PID指的是进程ID):
ls /proc/PID/task | wc -l

在linux中还有一个命令pmap,来输出进程内存的状况,可以用来分析线程堆栈:
pmap PID


htop: 动态观察程序的变化
$ htop --help
htop 1.0.2 - (C) 2004-2011 Hisham Muhammad
Released under the GNU GPL.

-C --no-color               Use a monochrome color scheme
-d --delay=DELAY            Set the delay between updates, in tenths of seconds
-h --help                   Print this help screen
-s --sort-key=COLUMN        Sort by COLUMN (try --sort-key=help for a list)
-u --user=USERNAME          Show only processes of a given user
-p --pid=PID,[,PID,PID...]  Show only the given PIDs
-v --version          Print version info

Long options may be passed with a single dash.

Press F1 inside htop for online help.
See 'man htop' for more information.

htop--一个可以让用户与之交互的进程查看器.作为文本模式的应用程序,主要用于控制台或X终端中.当前具有按树状方式来查看进程,支持颜色主题,可以定制等特性.

与top相比htop包含的优点有: 
a>可以横向或纵向滚动浏览进程列表,以便看到所有的进程和完整的命令行. 
b>在启动上,比 top 更快. 
c>杀进程时不需要输入进程号. 
d>htop支持鼠标操作. 
e>top已经很老了.

htop跟top一样,也是打开一个实时的监控界面,直接输入htop命令打开如下图所示界面:

终端进程的前台和后台以及管理_第29张图片

在上图中将输出的界面划分成了四个区域,其中:

上左区:显示了CPU、物理内存和交换分区的信息;

上右区:显示了任务数量、平均负载和连接运行时间等信息;

进程区域:显示出当前系统中的所有进程;

操作提示区:显示了当前界面中F1-F10功能键中定义的快捷功能。

F1:显示帮助信息;

终端进程的前台和后台以及管理_第30张图片

F2:配置界面中的显示信息;

终端进程的前台和后台以及管理_第31张图片

我们可以根据自己的需要修改显式模式以及想要显示的内容,比如:以LED的形式显示CPU的使用情况,并且在左边的区域添加hostname,在右边的区区域添加clock;

终端进程的前台和后台以及管理_第32张图片

我们也可以自定义进程区域中的显示内容:

终端进程的前台和后台以及管理_第33张图片

F3: 进程搜索

终端进程的前台和后台以及管理_第34张图片

F4:进程过滤器;

从上面的结果可以看出search和filter的区别:

search会将光标定位到符合条件的进程上,通过F3键进行逐个查找;而filter会直接将符合条件的进程筛选出来。

search和filter都使用ESC键来取消功能。

F5:显示进程树;

终端进程的前台和后台以及管理_第35张图片

F6:排序;

终端进程的前台和后台以及管理_第36张图片

F7:减小nice值;

F8:增加nice值;

直接修改光标选取的进程的nice值:

F9:杀掉指定进程;

终端进程的前台和后台以及管理_第37张图片

F10:退出htop。

空格键:用于标记选中的进程,用于实现对多个进程同时操作;

终端进程的前台和后台以及管理_第38张图片

U:取消所有选中的进程;

s:显示光标所在进程执行的系统调用;

下面显示的为init的系统调用信息:

l:显示光标所在进程的文件列表;

终端进程的前台和后台以及管理_第39张图片

I:对排序的结果进行反转显示;

例如,对PPID进行排序后,按‘I’键将会对PPID的排序结果进行反向排序。

a:绑定进程到指定的CPU;

u:显示指定用户的进程;

终端进程的前台和后台以及管理_第40张图片M:按照内存使用百分比排序,对应MEM%列;

P:按照CPU使用百分比排序,对应CPU%列;

T:按照进程运行的时间排序,对应TIME+列;

K:隐藏内核线程;

H:隐藏用户线程;

#:快速定位光标到PID所指定的进程上。

三、htop相关选项

-d:设置刷新时间,单位为秒;

-C:设置界面为无颜色;

终端进程的前台和后台以及管理_第41张图片

-u:显示指定用户的进程;

终端进程的前台和后台以及管理_第42张图片

-s:以指定的列排序;

终端进程的前台和后台以及管理_第43张图片



kill: 发送信号给指定进程号的一个或多个进程
    Linux中的kill命令用来终止指定的进程(terminate a process)的运行,是Linux下进程管理的常用命令。通常,终止一个前台进程可以使用Ctrl+C键,但是,对于一个后台进程就须用kill命令来终止,我们就需要先使用ps/pidof/pstree/top等工具获取进程PID,然后使用kill命令来杀掉该进程。kill命令是通过向进程发送指定的信号来结束相应进程的。在默认情况下,采用编号为15的TERM信号。TERM信号将终止所有不能捕获该信号的进程。对于那些可以捕获该信号的进程就要用编号为9的kill信号,强行“杀掉”该进程。 
1.命令格式:
    kill[参数][进程号]
2.命令功能:
    发送指定的信号到相应进程。不指定型号将发送SIGTERM(15)终止指定进程。如果任无法终止该程序可用“-KILL” 参数,其发送的信号为SIGKILL(9) ,将强制结束进程,使用ps命令或者jobs 命令可以查看进程号。root用户将影响用户的进程,非root用户只能影响自己的进程。
3.命令参数:
-l  信号,若果不加信号的编号参数,则使用“-l”参数会列出全部的信号名称
-a  当处理当前进程时,不限制命令名和进程号的对应关系
-p  指定kill 命令只打印相关进程的进程号,而不发送任何信号
-s  指定发送信号
-u  指定用户 
    注意:
          1、kill命令可以带信号号码选项,也可以不带。如果没有信号号码,kill命令就会发出终止信号(15),这个信号可以被进程捕获,使得进程在退出之前可以清理并释放资源。也可以用kill向进程发送特定的信号。例如:
kill -2 123
它的效果等同于在前台运行PID为123的进程时按下Ctrl+C键。但是,普通用户只能使用不带signal参数的kill命令或最多使用-9信号。
          2、kill可以带有进程ID号作为参数。当用kill向这些进程发送信号时,必须是这些进程的主人。如果试图撤销一个没有权限撤销的进程或撤销一个不存在的进程,就会得到一个错误信息。
          3、可以向多个进程发信号或终止它们。
          4、当kill成功地发送了信号后,shell会在屏幕上显示出进程的终止信息。有时这个信息不会马上显示,只有当按下Enter键使shell的命令提示符再次出现时,才会显示出来。
          5、应注意,信号使进程强行终止,这常会带来一些副作用,如数据丢失或者终端无法恢复到正常状态。发送信号时必须小心,只有在万不得已时,才用kill信号(9),因为进程不能首先捕获它。要撤销所有的后台作业,可以输入kill 0。因为有些在后台运行的命令会启动多个进程,跟踪并找到所有要杀掉的进程的PID是件很麻烦的事。这时,使用kill 0来终止所有由当前shell启动的进程,是个有效的方法。

$ man kill
KILL(1)                                        User Commands                                       KILL(1)



NAME
       kill - send a signal to a process

SYNOPSIS
       kill [options] <pid> [...]

DESCRIPTION
       The  default signal for kill is TERM.  Use -l or -L to list available signals.  Particularly useful
       signals include HUP, INT, KILL, STOP, CONT, and 0.  Alternate signals may  be  specified  in  three
       ways:  -9,  -SIGKILL or -KILL.  Negative PID values may be used to choose whole process groups; see
       the PGID column in ps command output.  A PID of -1 is special; it indicates  all  processes  except
       the kill process itself and init.

OPTIONS
       <pid> [...]
              Send signal to every <pid> listed.

       -<signal>
       -s <signal>
       --signal <signal>
              Specify  the  signal  to be sent.  The signal can be specified by using name or number.  The
              behavior of signals is explained in signal(7) manual page.

       -l, --list [signal]
              List signal names.  This option has optional argument, which will convert signal  number  to
              signal name, or other way round.

       -L, --table
              List signal names in a nice table.


       NOTES  Your shell (command line interpreter) may have a built-in kill command.  You may need to run
              the command described here as /bin/kill to solve the conflict.

EXAMPLES
       kill -9 -1
              Kill all processes you can kill.

       kill -l 11
              Translate number 11 into a signal name.

       kill -L
              List the available signal choices in a nice table.

       kill 123 543 2341 3453
              Send the default signal, SIGTERM, to all those processes.

SEE ALSO
       kill(2), killall(1), nice(1), pkill(1), renice(1), signal(7), skill(1)

STANDARDS
       This command meets appropriate standards. The -L flag is Linux-specific.

AUTHOR
       Albert Cahalan ⟨[email protected]⟩ wrote kill in 1999 to replace a  bsdutils  one  that  was  not
       standards compliant.  The util-linux one might also work correctly.

REPORTING BUGS
       Please send bug reports to ⟨[email protected]



procps-ng                                      October 2011                                        KILL(1)

发送 SIGKILL信号给进程号为2023的进程
$ kill -s KILL 2023 
$ kill -s 9 2023
$ kill -s SIGKILL 2023

$ kill -l
 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX

说明:
只有第9种信号(SIGKILL)才可以无条件终止进程,其他信号进程都有权利忽略。 下面是常用的信号:
HUP    1    终端断线
INT     2    中断(同 Ctrl + C)
QUIT    3    退出(同 Ctrl + \)
TERM   15    终止
KILL    9    强制终止
CONT   18    继续(与STOP相反, fg/bg命令)
STOP    19    暂停(同 Ctrl + Z)


$ sudo kill -L
 1 HUP      2 INT      3 QUIT     4 ILL      5 TRAP     6 ABRT     7 BUS
 8 FPE      9 KILL    10 USR1    11 SEGV    12 USR2    13 PIPE    14 ALRM
15 TERM    16 STKFLT  17 CHLD    18 CONT    19 STOP    20 TSTP    21 TTIN
22 TTOU    23 URG     24 XCPU    25 XFSZ    26 VTALRM  27 PROF    28 WINCH
29 POLL    30 PWR     31 SYS     

说明:
    init是Linux系统操作中不可缺少的程序之一。所谓的init进程,它是一个由内核启动的用户级进程。内核自行启动(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式,完成引导进程。所以,init始终是第一个进程(其进程编号始终为1)。 其它所有进程都是init进程的子孙。init进程是不可杀的!


killall:  发送信号给指定进程名称的一个或多个进程
$ killall --help
用法: killall [选项]... [--] 进程名...
       killall -l, --list
       killall -V, --version

  -e,--exact          require exact match for very long names
  -I,--ignore-case    case insensitive process name match
  -g,--process-group  kill process group instead of process
  -y,--younger-than   kill processes younger than TIME
  -o,--older-than     kill processes older than TIME
  -i,--interactive    ask for confirmation before killing
  -l,--list           list all known signal names
  -q,--quiet          don't print complaints
  -r,--regexp         interpret NAME as an extended regular expression
  -s,--signal SIGNAL  send this signal instead of SIGTERM
  -u,--user USER      kill only process(es) running as USER
  -v,--verbose        report if the signal was successfully sent
  -V,--version        display version information
  -w,--wait           wait for processes to die

          Linux系统中的killall命令用于杀死指定名字的进程(kill processes by name)。我们可以使用kill命令杀死指定进程PID的进程,如果要找到我们需要杀死的进程,我们还需要在之前使用ps等命令再配合grep来查找进程,而killall把这两个过程合二为一,是一个很好用的命令。
1.命令格式:
          killall[参数][进程名]
2.命令功能:
          用来结束同名的的所有进程
3.命令参数:
-Z 只杀死拥有scontext 的进程
-e 要求匹配进程名称
-I 忽略小写
-g 杀死进程组而不是进程
-i 交互模式,杀死进程前先询问用户
-l 列出所有的已知信号名称
-q 不输出警告信息
-s 发送指定的信号
-v 报告信号是否成功发送
-w 等待进程死亡
--help 显示帮助信息
--version 显示版本显示

发送 SIGKILL信号给进程名称为vim的进程
$ killall -s KILL vim 
$ killall -s 9  vim 
$ killall -s SIGKILL  vim 


pkill:  发送信号给指定进程名称的一个或多个进程
$ pkill --help

Usage:
 pkill [options] <pattern>

Options:
 -<sig>, --signal <sig>    signal to send (either number or name)
 -e, --echo                display what is killed (回显杀死的进程状态结果)
 -c, --count               count of matching processes
 -f, --full                use full process name to match (匹配进程的全名)
 -g, --pgroup <id,...>     match listed process group IDs
 -G, --group <gid,...>     match real group IDs 
 -n, --newest              select most recently started (匹配最新的选择)
 -o, --oldest              select least recently started (匹配最老的选择)
 -P, --parent <ppid,...>   match only child processes of the given parent
 -s, --session <sid,...>   match session IDs
 -t, --terminal <tty,...>  match by controlling terminal (杀死终端)
 -u, --euid <id,...>       match by effective IDs
 -U, --uid <id,...>        match by real IDs
 -x, --exact               match exactly with the command name
 -F, --pidfile <file>      read PIDs from file
 -L, --logpidfile          fail if PID file is not locked
 --ns <pid>                match the processes that belong to the same
                           namespace as <pid>
 --nslist <ns,...>         list which namespaces will be considered for
                           the --ns option.
                           Available namespaces: ipc, mnt, net, pid, user, uts

 -h, --help     display this help and exit
 -V, --version  output version information and exit

For more details see pgrep(1).


xkill: 在图形界面中点杀进程。执行此命令后,鼠标指针变为X图案。在窗口中点击左键杀死进程,右键取消
$ xkill --help
usage:  xkill [-option ...]
where options include:
    -display displayname    X server to contact
    -id resource            resource whose client is to be killed
    -frame                  don't ignore window manager frames
    -button number          specific button to be pressed to select window
    -all                    kill all clients with top level windows
    -version                print version and exit




skill:  送个讯号给正在执行的程序,预设的讯息为 TERM (中断) , 较常使用的讯息为 HUP , INT , KILL , STOP , CONT和0
$ skill --help

Usage:
 skill [signal] [options] <expression>

Options:
 -f, --fast         fast mode (not implemented)
 -i, --interactive  interactive
 -l, --list         list all signal names
 -L, --table        list all signal names in a nice table
 -n, --no-action    no action
 -v, --verbose      explain what is being done
 -w, --warnings     enable warnings (not implemented)

Expression can be: terminal, user, pid, command.
The options below may be used to ensure correct interpretation.
 -c, --command <command>  expression is a command name
 -p, --pid <pid>          expression is a process id number
 -t, --tty <tty>          expression is a terminal
 -u, --user <username>    expression is a username

Alternatively, expression can be:
 --ns <pid>               match the processes that belong to the same
                          namespace as <pid>
 --nslist <ns,...>        list which namespaces will be considered for
                          the --ns option.
                          Available namespaces: ipc, mnt, net, pid, user, uts


 -h, --help     display this help and exit
 -V, --version  output version information and exit

The default signal is TERM. Use -l or -L to list available signals.
Particularly useful signals include HUP, INT, KILL, STOP, CONT, and 0.
Alternate signals may be specified in three ways: -SIGKILL -KILL -9

For more details see skill(1).


4.主要参数

一般参数:
-f  快速模式/ 没有完成
-i  互动模式/ 每个动作将要被确认
-v  详细输出/ 列出所选择程序的资讯
-w  智能警告讯息/ 没有完成
-n  没有动作/ 显示程序代号

参数:选择程序的规则可以是, 终端机代号,使用者名称,程序代号,命令名称。
-t  终端机代号
-u  使用者名称
-p  程序代号
-c  命令名称 可使用的讯号
5.应用实例
1、停止所有在 PTY 装置上的程序
skill -KILL -v pts/*

2、skill 命令“冻结”进程
skill -STOP 1

3、暂时冻结进程以便为完成更重要的进程腾出空间
skill -CONT 16514




fuser 显示出当前哪个程序在使用磁盘上的某个文件、挂载点、甚至网络端口,并给出程序进程的详细信息
$ fuser --help
fuser: Invalid option --help
Usage: fuser [-fMuvw] [-a|-s] [-4|-6] [-c|-m|-n SPACE] [-k [-i] [-SIGNAL]] NAME...
       fuser -l
       fuser -V
Show which processes use the named files, sockets, or filesystems.

  -a,--all              display unused files too
  -i,--interactive      ask before killing (ignored without -k)
  -k,--kill             kill processes accessing the named file
  -l,--list-signals     list available signal names
  -m,--mount            show all processes using the named filesystems or block device
  -M,--ismountpoint     fulfill request only if NAME is a mount point
  -n,--namespace SPACE  search in this name space (file, udp, or tcp)
  -s,--silent           silent operation
  -SIGNAL               send this signal instead of SIGKILL
  -u,--user             display user IDs
  -v,--verbose          verbose output
  -w,--writeonly        kill only processes with write access
  -V,--version          display version information
  -4,--ipv4             search IPv4 sockets only
  -6,--ipv6             search IPv6 sockets only
  -                     reset options

  udp/tcp names: [local_port][,[rmt_host][,[rmt_port]]]


1.功能作用
显示出当前哪个程序在使用磁盘上的某个文件、挂载点、甚至网络端口,并给出程序进程的详细信息

2.位置
/bin/fuser

3.格式用法
fuser [-fMuv] [-a|-s] [-4|-6] [-c|-m|-n SPACE] [-k [-i] [-SIGNAL]] NAME...
fuser -l
fuser -V

 -a,--all              显示所有指定文件的访问进程
 -i,--interactive      在杀死一个进程前询问用户确认是否杀死进程
 -k,--kill             杀死访问文件的进程
 -l,--list-signals     列出所以已知的信号名
 -m,--mount            如果指定的文件在一个挂载的文件系统上或一个挂载的块设备上
 -M,--ismountpoint     fulfill request only if NAME is a mount point
 -n,--namespace SPACE  设置一个不同的命名空间
 -s,--silent           安静模式
 -SIGNAL               使用指定的信号代替SIGKILL(-9)杀死进程
 -u,--user             每个pid后面显示进程所属用户
 -v,--verbose          冗长模式。进程以ps的模式显示
 -w,--writeonly        kill only processes with write access
 -V,--version          显示版本信息
 -4,--ipv4             只搜索ipv4套接字
 -6,--ipv6             只搜索ipv6套接字
 -                     重置所有选项并把信号设置为 SIGKILL
5.应用实例
1、列出使用 /etc/passwd 文件的本地进程的进程号
fuser /etc/passwd

2、列出使用 /etc/filesystems 文件的进程的进程号和用户登录名
fuser -u /etc/filesystems

3、看一下哪个用户哪个进程占用着此设备
fuser -m -v /dev/sdb1

4、看一下哪个用户哪个进程占用着此设备,并杀掉占用进程
fuser -m -v -k /dev/sdb1

5、每杀掉一下进程会让你确认
fuser -m -v -k -i /dev/sdb1





来自为知笔记(Wiz)


你可能感兴趣的:(终端进程的前台和后台以及管理)