1.1 命令ps查看进程
【功能说明】
命令ps用于列出执行ps命令那个时刻的进程快照,如果要动态地显示进程信息,就需要使用top命令。
【语法格式】
ps [option]
ps [选项]
【选项说明】
命令ps参数选项及说明
参数选项 |
解释说明(带*的为重点) |
-a |
显示所有终端下执行的进程 |
a |
显示与终端相关进程,包含每个进程的完整路径(*) |
x |
显示与终端无关的所有进程(*) |
u |
显示进程的用户信息(*) |
-u |
显示指定用户相关的进程信息 |
-e |
显示所有进程(8) |
-f |
额外显示UID、PPID、C与STIME栏位(*) |
f |
显示进程树 |
-H |
显示进程树 |
-l |
以详细的格式来显示进程的状况 |
-o |
自定义输出指定的字段,以逗号分隔 |
--sort key |
Key表示为指定字段排序,默认升序,+key升序,-key降序 |
【使用范例】
不接任何参数
[root@A ~]# ps PID TTY TIME CMD 13069 pts/0 00:00:00 ps 31982 pts/0 00:00:00 bash
命令ps常用参数组合(每列的意思百度)
[root@A ~]# ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 Jan17 ? 00:00:01 /sbin/init root 2 0 0 Jan17 ? 00:00:00 [kthreadd] root 3 2 0 Jan17 ? 00:00:00 [migration/0] root 4 2 0 Jan17 ? 00:00:00 [ksoftirqd/0] root 5 2 0 Jan17 ? 00:00:00 [stopper/0] root 6 2 0 Jan17 ? 00:00:02 [watchdog/0] root 7 2 0 Jan17 ? 00:00:00 [migration/1] root 8 2 0 Jan17 ? 00:00:00 [stopper/1] root 9 2 0 Jan17 ? 00:00:01 [ksoftirqd/1] root 10 2 0 Jan17 ? 00:00:01 [watchdog/1] root 11 2 0 Jan17 ? 00:00:00 [migration/2] root 12 2 0 Jan17 ? 00:00:00 [stopper/2] root 13 2 0 Jan17 ? 00:00:00 [ksoftirqd/2] root 14 2 0 Jan17 ? 00:00:01 [watchdog/2]
[root@A ~]# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.0 19364 1536 ? Ss Jan17 0:01 /sbin/init root 2 0.0 0.0 0 0 ? S Jan17 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S Jan17 0:00 [migration/0] root 4 0.0 0.0 0 0 ? S Jan17 0:00 [ksoftirqd/0] root 5 0.0 0.0 0 0 ? S Jan17 0:00 [stopper/0] root 6 0.0 0.0 0 0 ? S Jan17 0:02 [watchdog/0] root 7 0.0 0.0 0 0 ? S Jan17 0:00 [migration/1] root 8 0.0 0.0 0 0 ? S Jan17 0:00 [stopper/1] root 9 0.0 0.0 0 0 ? S Jan17 0:01 [ksoftirqd/1] root 10 0.0 0.0 0 0 ? S Jan17 0:01 [watchdog/1]
显示指定用户的相关进程信息
[root@A ~]# ps -u root PID TTY TIME CMD 1 ? 00:00:01 init 2 ? 00:00:00 kthreadd 3 ? 00:00:00 migration/0 4 ? 00:00:00 ksoftirqd/0 5 ? 00:00:00 stopper/0 6 ? 00:00:02 watchdog/0
以详细的格式显示进程状况
[root@A ~]# ps -l F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 4 R 0 13103 31982 0 80 0 - 27023 - pts/0 00:00:00 ps 4 S 0 31982 31979 0 80 0 - 27116 wait pts/0 00:00:00 bash
显示进程树
PID TTY TIME CMD 31979 ? 00:00:05 sshd 31982 pts/0 00:00:00 bash 13113 pts/0 00:00:00 ps 2820 pts/1 00:00:00 bash 29780 pts/1 00:00:00 su 29782 pts/1 00:00:00 bash 29812 pts/1 00:00:00 su 29816 pts/1 00:00:00 bash 29835 pts/1 00:00:00 su 29837 pts/1 00:00:00 bash 29862 pts/1 00:00:00 su 29866 pts/1 00:00:00 bash 30463 pts/1 00:00:00 su 30465 pts/1 00:00:00 bash 30504 pts/1 00:00:00 su 30508 pts/1 00:00:00 bash 31734 pts/1 00:00:00 su 31736 pts/1 00:00:00 bash 31796 pts/1 00:00:00 su 31800 pts/1 00:00:00 bash 31828 pts/1 00:00:00 su 31830 pts/1 00:00:00 bash 31861 pts/1 00:00:00 su 31865 pts/1 00:00:00 bash 31886 pts/1 00:00:00 su 31888 pts/1 00:00:00 bash 1437 pts/1 00:00:00 su 1441 pts/1 00:00:00 bash [root@A ~]# ps axf PID TTY STAT TIME COMMAND 31979 ? Ss 0:05 \_ sshd: root@pts/0,pts/1 31982 pts/0 Ss 0:00 \_ -bash 13116 pts/0 R+ 0:00 | \_ ps axf 2820 pts/1 Ss 0:00 \_ -bash 29780 pts/1 S 0:00 \_ su - yhh2 29782 pts/1 S 0:00 \_ -bash 29812 pts/1 S 0:00 \_ su - root 29816 pts/1 S 0:00 \_ -bash 29835 pts/1 S 0:00 \_ su - yhh2 29837 pts/1 S 0:00 \_ -bash 29862 pts/1 S 0:00 \_ su - root 29866 pts/1 S 0:00 \_ -bash 30463 pts/1 S 0:00 \_ su - yhh 30465 pts/1 S 0:00 \_ -bash 30504 pts/1 S 0:00 \_ su - root
输出指定的字段
格式:ps -eo “%p%y%x%c”
查看进程在哪个cpu上运行
[root@A ~]# ps -eo pid,args,psr PID COMMAND PSR 1 /sbin/init 1 2 [kthreadd] 4 3 [migration/0] 0 4 [ksoftirqd/0] 0 5 [stopper/0] 0 6 [watchdog/0] 0 7 [migration/1] 1 8 [stopper/1] 1 9 [ksoftirqd/1] 1 10 [watchdog/1] 1 11 [migration/2] 2 12 [stopper/2] 2
1.2 命令pstree:显示进程状态树
【功能说明】
命令pstree以树型结构显示进程和进程之间的关系
【语法格式】
pstree [option] [pid|user]
pstree [选项] [进程号|用户]
【选项说明】
命令pstree的参数选项及说明
参数选项 |
解释说明(带*的为重点) |
-a |
显示启动每个进程对应的完整指令,包含启动进程的路径、参数等 |
-c |
不精简显示进程信息,即显示的进程中包含子进程和父进程 |
-h |
对现在执行的程序进行特别标注 |
-n |
根据进程PID号来排除输出,默认是以程序名称排序输出的 |
-p |
显示进程的PID |
-u |
显示进程对应的用户名称 |
【使用范例】
显示进程树
[root@web01 data]# pstree init─┬─abrtd ├─acpid ├─atd ├─auditd───{auditd} ├─automount───4*[{automount}] ├─certmonger ├─console-kit-dae───63*[{console-kit-da}] ├─crond ├─cupsd ├─dbus-daemon ├─hald─┬─hald-runner─┬─hald-addon-acpi │ │ └─hald-addon-inpu │ └─{hald} ├─irqbalance ├─login───bash ├─master─┬─pickup │ └─qmgr ├─mcelog ├─5*[mingetty] ├─rpc.idmapd ├─rpc.mountd ├─rpc.rquotad ├─rpc.statd ├─rpcbind ├─rsyslogd───3*[{rsyslogd}] ├─sshd─┬─sshd───bash │ └─sshd─┬─bash───su───bash │ └─bash───pstree └─udevd───2*[udevd]
显示指定用户的进程
[root@web01 ~]# pstree yhh
bash
显示进程所属的用户
[root@web01 ~]# pstree -u init─┬─abrtd ├─acpid ├─atd ├─auditd───{auditd} ├─automount───4*[{automount}] ├─certmonger ├─console-kit-dae───63*[{console-kit-da}] ├─crond ├─cupsd ├─dbus-daemon(dbus) ├─hald(haldaemon)─┬─hald-runner(root)─┬─hald-addon-acpi(haldaemon) │ │ └─hald-addon-inpu │ └─{hald} ├─irqbalance ├─login───bash ├─master─┬─pickup(postfix) │ └─qmgr(postfix) ├─mcelog ├─5*[mingetty] ├─rpc.idmapd ├─rpc.mountd ├─rpc.rquotad ├─rpc.statd(rpcuser) ├─rpcbind(rpc) ├─rsyslogd───3*[{rsyslogd}] ├─sshd─┬─sshd───bash │ └─sshd─┬─bash───su───bash(yhh) │ └─bash───pstree └─udevd───2*[udevd]
1.3 命令pgrep:查找匹配条件的进程
【功能说明】
命令pgrep可以查找匹配条件的进程号
【语法格式】
pgrep [option] [pattern]
pgrep [选项] [匹配条件]
【选型说明】
命令pgrep的参数选项及说明
参数选项 |
解释说明(带*的为重点) |
-u |
显示指定用户的所有进程号 |
【使用范例】
显示指定进程的pid命令
[root@web01 ~]# pgrep crond 1887
显示指定用户的所有进程号
[root@web01 ~]# pgrep -u root 1 2 3 4 5 6 7 8 9 10 ........
1.4 命令kill:终止进程
【功能说明】
命令kill能够终止你希望停止的进程
【语法格式】
kill [option] [pid]
kill [选项] [进程号]
【选项说明】
命令kill的参数选项及说明
参数选项 |
解释说明(带*的为重点) |
-l |
列出全部的信号名称 |
-p |
指定kill命令只打印相关进程的进程号,而不发送任何信息 |
-s |
指定要发送的信号(*) |
【使用范例】
列出所有信号的名称
[root@web01 ~]# 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 [root@web01 ~]# kill -l SIGKILL 9 [root@web01 ~]# kill -l 9 KILL
对常用信号进行了说明
信号 |
说明 |
HUP(1) |
挂起,通常因终端掉线或用户退出而引发 |
INT(2) |
中断,通常是按下Ctrl+c组合键来发出这个信号 |
QUIT(3) |
退出,通常是按下Ctrl+组合键来发出这个信号 |
KILL(9) |
立即结束进程的运行 |
TERM(15) |
终止,通常在系统关机时发送 |
TSTP(20) |
暂停进程的运行,通常是按下Ctrl+z组合键来发出这个信号 |
1.5 命令killall:通过进程名终止进程
使用kill命令终止进程还需要先获取进程的Pid进程号,这个过程有点繁琐,而使用killall命令就可以直接使用“killall进程名”这种形式终止进程
【语法格式】
killall [option] [name]
killall [选项] [进程名]
【选项说明】
命令killall的参数选项及说明
参数选项 |
解释说明(带*的为重点) |
-e |
对于很长的名字,要求能够准确匹配,默认情况下,如果一个进程名的长度超过了15个字符,则无法使用整个名字(溢出了)。在这种情况下,killall会终止所有匹配名字前15个字符的所有进程。而-e参数的作用是忽略模糊匹配项目。如果同时指定-v选项,则killall会针对每个忽略的记录打印一条消息 |
-I |
不区分大小写 |
-g |
终止属于该进程组的进程 |
-i |
终止进程之间的询问是否正确 |
-l |
列出所有已知的信号名 |
-q |
如果没有进程终止则不提示 |
-r |
使用正则表达式匹配要终止的进程名 |
-s |
用指定的信号代替默认信号 |
-u |
终止指定用户的进程(*) |
-v |
报告信号是否发送成功 |
-w |
等待所有被终止的进程死去,killall每秒都会检查一次被终止的进程是否仍然存在,其仅在都死光后才返回。注意,如果信号被忽略,或者没有起作用,或者进程停留在僵尸状态,那么killall可能会永久等待。(*) |
【使用范例】
终止定时任务服务进程的例子
[root@web01 ~]# killall crond [root@web01 ~]# killall crond crond: 没有进程被杀死 [root@web01 ~]# /etc/init.d/crond start 正在启动 crond: [确定] [root@web01 ~]# killall -w crond [root@web01 ~]# killall -w crond crond: 没有进程被杀死
终止指定用户的所有进程
[root@web01 ~]# killall -u yhh nginx
nginx: 没有进程被杀死
1.6 命令pkill:通过进程名终止进程
【功能说明】
命令pkill可以通过进程名终止指定的进程,使用killall终止进程需要连续执行几次,而pkill可以杀死指定进程及其所有子进程。
【语法格式】
pkill [opion] [name]
pkill [选项] [进程名 ]
【选项说明】
参数选项 |
解释说明(带*的为重点) |
-t 终端 |
杀死指定终端的进程(*) |
-u 用户 |
杀死指定用户的进程(*) |
【使用范例】
通过进程名终止进程
[root@web01 ~]# /etc/init.d/crond status crond 已死,但是 subsys 被锁 [root@web01 ~]# /etc/init.d/crond start 正在启动 crond: [确定] [root@web01 ~]# /etc/init.d/crond status crond (pid 10047) 正在运行... [root@web01 ~]# pkill crond [root@web01 ~]# /etc/init.d/crond status crond 已死,但是 subsys 被锁
通过进程名终止进程
[root@web01 ~]# w 16:54:50 up 20 days, 20:28, 4 users, load average: 0.00, 0.00, 0.00 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root tty1 - Thu17 5days 0.00s 0.00s -bash root pts/0 10.16.50.4 Mon16 1.00s 0.19s 0.00s w root pts/1 10.16.50.4 Tue09 4:38m 0.07s 0.07s -bash root pts/2 10.16.50.4 Tue10 1:26 0.02s 0.01s -bash [root@web01 ~]# pkill -t tty1
通过用户名终止进程
[root@web01 ~]# w 16:57:25 up 20 days, 20:31, 5 users, load average: 0.08, 0.02, 0.01 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root tty1 - Thu17 5days 0.00s 0.00s -bash root pts/0 10.16.50.4 Mon16 0.00s 0.20s 0.00s w root pts/1 10.16.50.4 Tue09 4:41m 0.07s 0.07s -bash root pts/2 10.16.50.4 Tue10 1:07 0.02s 0.01s -bash yhh pts/3 10.16.50.4 16:57 9.00s 0.00s 0.00s -bash [root@web01 ~]# pkill -u yhh
1.7 命令top:实时显示系统中各个进程的资源占用状况
【功能说明】
命令top用于实时地对系统处理器状态进行监控,它能够实时地显示系统中各个进程的资源占用状况。该命令可以按照CPU的使用、内存的使用和执行时间对系统任务进程进行排序显示,同时top命令还可以通过交互式进行设定显示。
【语法格式】
top [option]
top [选项]
【选项说明】
命令top的参数及说明
参数选项 |
解释说明(带*的为重点) |
-a |
将进程使用内存排序 |
-b |
以批处理的模式显示进程信息,输出结果可以传递给其他程序或写入到文件中。在这种模式下,top命令不会接受任何输入,一直运行直到达到-n选项设置的阈值,或者按Ctrl+C等组合键终止程序 |
-c |
显示进程的整个命令路径,而不是只显示命令名称 |
-d |
指定每两次屏幕信息刷新之间的时间间隔 |
-H |
指定这个可以显示每个线程的情况,否则就是进程的总的状态 |
-i |
不显示闲置或者僵尸的进程 |
-n |
top输出信息更新的次数,完成后将退出top命令 |
-p |
显示指定的进程信息 |
交互式命令
交互式命令 |
含义 |
H或? |
显示帮助信息,给出交互式命令的一些说明总结 |
Z |
全局颜色设置 |
B |
全局字体加粗设置 |
l |
切换是否显示平均负载和启动时间信息 |
t |
切换是否显示进程和CPU状态信息 |
m |
切换是否显示内存信息 |
l |
数字l,用于多核CPU监控,可监控每个逻辑CPU的状态 |
I |
Irix/Solaris模式 |
f |
从当前显示列表中添加或删除项目。按“f”键之后会显示列的列表,按“a~z”键即可显示或隐藏对应的列,最后按回车键确认 |
o |
改变top输出信息中显示项目的顺序。按小写的“a~z”键可以将相应的列向右移动,而按大写的“A~Z”键可以将相应的列向左移动,最后按回车键确认 |
F或O |
选择排序的列 |
<,> |
移动选择排序的列,“<”选择左邻一列排序,“>”选择右邻一列排序 |
R |
切换正常/反转排序 |
H |
切换是否显示线程信息 |
c |
切换是否显示完整命令行和命令名称信息 |
i |
切换是否显示完整命令行和命令名称信息 |
S |
切换到累计模式 |
x |
以高亮的形式排序对应列,需要结合b/z使用 |
y |
高亮运行的进程,需要结合b/z使用 |
z |
打开/关闭颜色 |
b |
打开/关闭加粗 |
u |
显示指定用户相关的进程信息 |
n或# |
设置显示进程的最大行数 |
k |
终止一个进程,系统将提示用户输入一个需要终止进程的PID |
r |
重新设置一个进程的优先级,系统提示用户输入需要改变的进程PID,以及需要设置的进程优先级值。输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权。默认值是10 |
d或s |
改变top输出信息两次刷新之间的时间,系统将提示输入新的时间,单位是s。如果是小数,则换算成ms;如果输入0,那么系统输出将会不断刷新,默认刷新时间3s.需要注意的是,如果设置大小的时间,则可能会引起系统不断刷新,无法看清楚输出显示情况,而且系统负载也会加大 |
W |
将当前top设置写入“~/.toprc”文件中 |
q |
退出top显示 |
【使用范例】
显示进程信息
[root@bachup ~]# top top - 16:40:36 up 53 days, 1:47, 3 users, load average: 0.00, 0.00, 0.00 Tasks: 189 total, 1 running, 188 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 Mem: 32876344k total, 3043324k used, 29833020k free, 187808k buffers Swap: 4128764k total, 0k used, 4128764k free, 2350220k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 34 root RT 0 0 0 0 S 0.3 0.0 0:06.58 watchdog/7 16672 root 20 0 15032 1308 948 R 0.3 0.0 0:00.05 top 1 root 20 0 19364 1536 1224 S 0.0 0.0 0:01.78 init 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root RT 0 0 0 0 S 0.0 0.0 0:00.09 migration/0 4 root 20 0 0 0 0 S 0.0 0.0 0:02.16 ksoftirqd/0 5 root RT 0 0 0 0 S 0.0 0.0 0:00.00 stopper/0 6 root RT 0 0 0 0 S 0.0 0.0 0:09.13 watchdog/0 7 root RT 0 0 0 0 S 0.0 0.0 0:03.37 migration/1 8 root RT 0 0 0 0 S 0.0 0.0 0:00.00 stopper/1 9 root 20 0 0 0 0 S 0.0 0.0 0:00.73 ksoftirqd/1 10 root RT 0 0 0 0 S 0.0 0.0 0:06.74 watchdog/1 ......
将进程按照使用内存排序
[root@bachup ~]# top -a top - 17:10:45 up 53 days, 2:17, 3 users, load average: 0.00, 0.00, 0.00 Tasks: 189 total, 1 running, 188 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 Mem: 32876344k total, 3042952k used, 29833392k free, 187808k buffers Swap: 4128764k total, 0k used, 4128764k free, 2350236k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 5675 root 20 0 102m 4592 3548 S 0.0 0.0 0:00.07 sshd 2043 root 20 0 102m 4572 3516 S 0.0 0.0 0:00.26 sshd 8552 root 20 0 249m 4112 1128 S 0.0 0.0 0:05.41 rsyslogd 3543 root 20 0 377m 3980 1424 S 0.0 0.0 1:13.51 automount 1559 haldaemo 20 0 38088 3836 2884 S 0.0 0.0 0:27.50 hald 8877 root 20 0 184m 3580 2504 S 0.0 0.0 0:00.00 cupsd 3822 postfix 20 0 81204 3468 2588 S 0.0 0.0 0:03.59 qmgr 3819 root 20 0 80956 3464 2556 S 0.0 0.0 0:21.03 master 1921 root 20 0 4020m 3460 1996 S 0.0 0.0 0:00.13 console-kit-dae 16604 postfix 20 0 81036 3428 2548 S 0.0 0.0 0:00.00 pickup 1861 root 20 0 79520 2992 2416 S 0.0 0.0 0:00.03 login 9058 root 20 0 178m 2372 1552 S 0.0 0.0 0:00.00 abrtd 6788 root 20 0 105m 1788 1424 S 0.0 0.0 0:00.07 bash
以批处理模式显示进程信息
[root@bachup ~]# top -b top - 17:14:48 up 53 days, 2:21, 3 users, load average: 0.00, 0.00, 0.00 Tasks: 189 total, 1 running, 188 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 Mem: 32876344k total, 3042688k used, 29833656k free, 187808k buffers Swap: 4128764k total, 0k used, 4128764k free, 2350236k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 20 0 19364 1536 1224 S 0.0 0.0 0:01.78 init 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root RT 0 0 0 0 S 0.0 0.0 0:00.09 migration/0 4 root 20 0 0 0 0 S 0.0 0.0 0:02.16 ksoftirqd/0 5 root RT 0 0 0 0 S 0.0 0.0 0:00.00 stopper/0 6 root RT 0 0 0 0 S 0.0 0.0 0:09.13 watchdog/0 7 root RT 0 0 0 0 S 0.0 0.0 0:03.37 migration/1 8 root RT 0 0 0 0 S 0.0 0.0 0:00.00 stopper/1 9 root 20 0 0 0 0 S 0.0 0.0 0:00.73 ksoftirqd/1
显示进程的完整路径
[root@bachup ~]# top -c top - 17:17:19 up 53 days, 2:23, 3 users, load average: 0.00, 0.00, 0.00 Tasks: 189 total, 1 running, 188 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 Mem: 32876344k total, 3042572k used, 29833772k free, 187808k buffers Swap: 4128764k total, 0k used, 4128764k free, 2350236k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 20 0 19364 1536 1224 S 0.0 0.0 0:01.78 /sbin/init 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 [kthreadd] 3 root RT 0 0 0 0 S 0.0 0.0 0:00.09 [migration/0] 4 root 20 0 0 0 0 S 0.0 0.0 0:02.16 [ksoftirqd/0] 5 root RT 0 0 0 0 S 0.0 0.0 0:00.00 [stopper/0] 6 root RT 0 0 0 0 S 0.0 0.0 0:09.13 [watchdog/0] 7 root RT 0 0 0 0 S 0.0 0.0 0:03.37 [migration/1] 8 root RT 0 0 0 0 S 0.0 0.0 0:00.00 [stopper/1] 9 root 20 0 0 0 0 S 0.0 0.0 0:00.73 [ksoftirqd/1]
1.8 命令nice:调整程序运行时的优先级
【功能说明】
命令nice是一个当程序启动时,修改程序运行优先级的命令
Linux的优先级范围是从-20(最大优先级) 到19(最小优先级)。优先级越高程序占用CPU的次数越多,反之亦然。
【语法格式】
nice [option] [command]
nice [选项] [命令语句]
【选项说明】
参数选项 |
解释说明(带*的为重点) |
-n num |
设置nice增加的数值,num取值从-20~19。不使用-n选项相当于-你10的效果说明: 1、root用户可以随意调整自己活他人程序的nice值,且范围-20~19 2、普通用户仅可以调整自己程序的nice值,且范围仅0~19(避免普通用户抢占系统资源) 3、普通用户仅可将nice值往高调,例如nice值原本为5,则原来仅能调整到大于5的值。 |
【使用范例】
单独使用nice命令
[root@bachup ~]# nice 0
默认增加优先级10
[root@bachup ~]# nice nice 10 [root@bachup ~]# nice nice nice 19
查看进程优先级
[root@bachup ~]# ps -l F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 4 S 0 6788 2043 0 80 0 - 27089 do_wai pts/2 00:00:00 bash 4 R 0 20254 6788 0 80 0 - 27036 - pts/2 00:00:00 ps
实测:测试PR1和N1的关系
[root@bachup ~]# vi test1 & [1] 20256 [root@bachup ~]# ps -l F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 4 S 0 6788 2043 0 80 0 - 27089 do_wai pts/2 00:00:00 bash 0 T 0 20256 6788 0 80 0 - 28094 do_sig pts/2 00:00:00 vi 4 R 0 20265 6788 0 80 0 - 27037 - pts/2 00:00:00 ps [1]+ Stopped vi test1 [root@bachup ~]# nice -n -10 vim test2 & [2] 20267 [root@bachup ~]# ps -l F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 4 S 0 6788 2043 0 80 0 - 27089 do_wai pts/2 00:00:00 bash 0 T 0 20256 6788 0 80 0 - 28094 do_sig pts/2 00:00:00 vi 4 T 0 20267 6788 0 70 -10 - 34239 do_sig pts/2 00:00:00 vim 4 R 0 20268 6788 0 80 0 - 27037 - pts/2 00:00:00 ps [2]+ Stopped nice -n -10 vim test2
1.9命令renice:调整运行中的进程的优先级
【功能说明】
命令renice修改其优先级,在系统运行中,有时会发生某个不是很重要的进程占用了太多的CPU资源,因此会希望限制这个进程或者是希望某个进程优先运行,这些都是renice命令的使用场景。
【语法格式】
renice [option]
renice [选项]
【选项说明】
命令renice的参数及说明
参数选项 |
解释说明(带*的为重点) |
-n num |
设置nice增加的数值,num取值范围从-20~19 |
-g |
修改指定用户组的进程的优先级 |
-u |
修改指定用户的进程的优先级 |
-p |
修改指定pid的进程的优先级 |
【使用范围】
修改指定进程号的优先级
[root@bachup ~]# ps -l F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 4 S 0 6788 2043 0 80 0 - 27089 do_wai pts/2 00:00:00 bash 0 T 0 20256 6788 0 80 0 - 28094 do_sig pts/2 00:00:00 vi 4 T 0 20267 6788 0 70 -10 - 34239 do_sig pts/2 00:00:00 vim 4 R 0 20306 6788 0 80 0 - 27037 - pts/2 00:00:00 ps [root@bachup ~]# renice -n 5 -p 20267 20267: old priority -10, new priority 5 [root@bachup ~]# ps -l F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 4 S 0 6788 2043 0 80 0 - 27089 do_wai pts/2 00:00:00 bash 0 T 0 20256 6788 0 80 0 - 28094 do_sig pts/2 00:00:00 vi 4 T 0 20267 6788 0 85 5 - 34239 do_sig pts/2 00:00:00 vim 4 R 0 20310 6788 0 80 0 - 27036 - pts/2 00:00:00 ps
1.10 命令nohup:用户退出系统进程继续工作
【功能说明】
命令nohup可以将程序以忽略挂起信号的方式运行起来,被运行程序的输出信息将不会显示到终端。
无论是否将nohup命令的输出重定向到终端,输出都将写入到当前目录的nohup.out文件中。如果当前目录的nohup.out文件不可写,则输出重定向到$HOME/nohup.out文件中。
【语法格式】
nohup [option]
nohup [选项]
【使用案例】
让执行的命令在当前会话终止后继续保持运行
[root@bachup ~]# nohup ping www.baidu.com nohup: 忽略输入并把输出追加到"nohup.out"
打开另一个窗口
[root@bachup ~]# ps -ef|grep ping root 20625 6788 0 12:14 pts/2 00:00:00 ping www.baidu.com root 20650 20627 0 12:15 pts/0 00:00:00 grep ping [root@bachup ~]# tail -f nohup.out 64 bytes from 14.215.177.38: icmp_seq=49 ttl=54 time=46.7 ms 64 bytes from 14.215.177.38: icmp_seq=50 ttl=54 time=26.8 ms 64 bytes from 14.215.177.38: icmp_seq=51 ttl=54 time=26.6 ms 64 bytes from 14.215.177.38: icmp_seq=66 ttl=54 time=26.6 ms 64 bytes from 14.215.177.38: icmp_seq=67 ttl=54 time=29.0 ms 64 bytes from 14.215.177.38: icmp_seq=68 ttl=54 time=27.2 ms ^C [root@bachup ~]# kill 20625
用&配合nohup运行
[root@bachup ~]# nohup ping www.baidu.com & [3] 20706 [root@bachup ~]# nohup: 忽略输入并把输出追加到"nohup.out" [root@bachup ~]# tail -f nohup.out 64 bytes from 14.215.177.38: icmp_seq=62 ttl=54 time=32.3 ms 64 bytes from 14.215.177.38: icmp_seq=63 ttl=54 time=26.7 ms 64 bytes from 14.215.177.38: icmp_seq=64 ttl=54 time=41.0 ms 64 bytes from 14.215.177.38: icmp_seq=65 ttl=54 time=28.1 ms ^C [root@bachup ~]# kill 20706
1.11 命令strace:跟踪进程的系统调用
【功能说明】
命令strace是Linux环境下的一款程序调试工具,用于检查一个应用程序使用的系统调用以及它所接收的系统信息。Strace会跟踪程序运行时的整个生命周期,输出每一个系统调用的名字、参数、返回值和执行所消耗的时间等,是高级运维和开发人员排查问题的杀手锏。
【语法格式】
strace [option]
strace [选项]
【选项说明】
命令strace的参数选项及说明
参数选项 |
解释说明(带*的为重点) |
-c |
统计每一个系统调用所执行的时间,次数和出错的次数等 |
-d |
输出strace关于标准错误的调试信息 |
-f |
跟踪目标进程,以及目标进程创建的所有子进程(*) |
-ff |
如果提供 -o filename,则将所有进程的跟踪结果输出到相应的filename.pid中,pid是各进程的进程号。 |
-i |
输出系统调用的入口指针 |
-q |
禁止输出关于脱离的消息 |
-r |
输出每一个系统调用的相对时间 |
-t |
在输出中的每一行前加上时间信息,例如16:45:28 |
-tt |
在输出中的每一行前加上时间信息,精确到微妙。例如:11:18:59.759546(*) |
-ttt |
在输出中的每一行加上时间信息,精确到微妙,而且时间表示为UNIX时间戳。例如1628378.3890289 |
-T |
显示每次系统调用所花费的时间 |
-v |
对于某些相关调用,把完整的环境变量、文件stat结构等打印出来 |
-x |
以十六进制形式输出非标准字符串 |
-xx |
所有字符串以十六进制形式输出 |
-e expr |
输出过滤器,通过表达式,可以过滤掉你不想要的输出(*) expr是一个表达式,用于控制如何跟踪:[qualifer=][!]value[,value2] 1、qualifer只能是trace、abbrev、verbose、raw、sugnal、read、write其中之一 2、Value是用来限定的符号或数字 3、默认qualifer是trace 4、感喊号是否定符号 例如: -e open等价于-e trace=open,表示只跟踪open调用 而-e trace=!open 表示跟踪除了open以外的其他调用 常见选项: -e trace=[set] 只跟踪指定的系统调用 -e trace=file 只跟踪与文件操作有关的系统调用 -e trace=process 只跟踪与进程控制有关的系统调用 -e trace=network 只跟踪与网络有关的系统调用 -e trace=signal 只跟踪与系统信号有关的系统调用 -e trace=desc 只跟踪与文件描述符有关的系统调用 -e trace=ipc 只跟踪与进程通信有关的系统调用 -e addrev=[set] 设定strace输出的系统调用的结果集 -e raw=[set] 将指定的系统调用的参数以十六进制显示 -e signal=[set] 指定跟踪的系统信号 -e read=[set] 输出从指定文件中读出的数据 -e write=[set] 输出写入到指定文件的数据 |
-o filename |
将strace的输出写入文件filename |
-p pid |
指定要跟踪的进程pid,要同时跟踪多个pid,重复多次-p选项即可(8) |
-s strsize |
指定输出的字符串的最大长度,默认为32.并没有将文件名视为字符串,默认全部输出 |
-u username |
以username的UID和GID执行所跟踪的命令 |
【使用范例】
排查Nginx 403 forbidden 错误
[root@bachup ~]# strace -tt -f /application/nginx/sbin/nginx
只跟踪与文件操作有关的系统调用
[root@bachup ~]# strace -tt -f -e trace=file /application/nginx/sbin/nginx
通过pid跟踪进程
[root@bachup ~]# pgrep rsync 3631 [root@bachup ~]# strace -tt -f -e trace=file -p 3631 Process 3631 attached
1.12 命令ltrace:跟踪进程调用函数库
【功能说明】
命令ltrace能够跟踪进程的库函数调用,它会显现调用了那个库函数,而strace则是跟踪进程的每个系统调用。
【语法格式】
ltrace [option]
litrace [选项]
【选项说明】
命令ltrace的参数选项及说明
参数选项 |
解释说明(带*的为重点) |
-c |
统计库函数每次调用的时间,最后程序退出时打印摘要 |
-C |
解码低级别名称(内核级)为用户级名称 |
-d |
打印调试信息 |
-e expr |
输出过滤器,通过表达式,可以过滤掉你不想要的输出(*) -e printf 表示只查看printf 函数调用 -e! printf 表示查看除printf函数以外的所有函数调用 |
-f |
跟踪子进程 |
-o filename |
将ltrace的输出写入文件filename |
-p pid |
指定要跟踪的进程pid(*) |
-r |
输出每一个调用的相对时间 |
-S |
显示系统调用 |
-t |
在输出中的每一行前加上时间信息。例如:16:45:28 |
-tt |
在输出中的每一行前加上时间信息,精确到微妙。 |
-ttt |
在输出的每一行加上时间信息,精确到微妙,而且时间表示为UNIX时间戳 |
-T |
显示每次调用所花费的时间 |
-u username |
以username的UID和GID执行所跟踪的命令 |
【使用范例】
命令ltrace使用
[root@bachup ~]# ltrace /application/nginx/sbin/nginx
通过pid跟踪进程调用函数库
[root@bachup ~]# pgrep rsync 3631 [root@bachup ~]# ltrace -p 3631 ^C [root@bachup ~]#
1.13 命令runlevel:输出当前运行级别
【功能说明】
命令runlevel用于输出当前linux系统的运行级别
【语法格式】
runlevel [option]
runlevel [选项]
参数选项 |
解释说明(带*的为重点) |
--quit |
不输出结果,用于通过返回值判断的场合 |
【使用案例】
查看当前系统的运行级别
[root@bachup ~]# runlevel N 3
0: 停机 1:单用户模式 2:无网络的多用户模式 3:多用户模式 4:未使用 5:图形界面模式
6:重启
1.14 命令init:初始化linux进程
【功能说明】
命令init是Linux下的进程初始化工具,init进程是所有linux进程的父进程,它的进程号为1,init命令的主要任务是依据配置文件“/etc/inittab”创建linux进程。
【语法格式】
init [option]
init [选项]
【使用范例】
切换运行级别
[root@bachup ~]# init 0 [root@bachup ~]# init 6
1.15 命令service:管理系统服务
【功能说明】
命令service用于对系统进行管理,比如启动(start)、停止(stop)、重启(restart)、重新加载配置(reload)、查看状态(status)等,该命令在centos7里被systemctl取代。
【选项说明】
命令service的参数选项及说明
参数选项 |
解释说明(带*的为重点) |
--status-all |
显示所有服务状态 |
【使用案例】
[root@bachup ~]# service --status-all abrt-ccpp hook is installed abrtd (pid 9058) 正在运行... abrt-dump-oops 已停 acpid (pid 8831) 正在运行... automount (pid 3543) 正在运行... certmonger (pid 3468) 正在运行... 表格:filter Chain INPUT (policy ACCEPT) num target prot opt source destination 1 ACCEPT all ::/0 ::/0 state RELATED,ESTABLISHED 2 ACCEPT icmpv6 ::/0 ::/0 3 ACCEPT all ::/0 ::/0 4 ACCEPT udp ::/0 fe80::/64 state NEW udp dpt:546 5 ACCEPT tcp ::/0 ::/0 state NEW tcp dpt:22 6 REJECT all ::/0 ::/0 reject-with icmp6-adm-prohibited ........
管理系统服务
[root@bachup ~]# service crond 用法:/etc/init.d/crond {start|stop|status|restart|condrestart|try-restart|reload|force-reload} [root@bachup ~]# service crond stop 停止 crond: [确定] [root@bachup ~]# service crond start 正在启动 crond: [确定] [root@bachup ~]# service crond restart 停止 crond: [确定] 正在启动 crond: [确定] [root@bachup ~]# service crond status crond (pid 21940) 正在运行...