时间:2020-02-20来源:系统城作者:电脑系统城
pstree,ps,pidof,pgrep,top,htop,glances,pmap,vmstat,dstat,kill,pkill,job,bg,fg,nohup,nice,renice,killall。。。
这个第一个进程:/sbin/init
# pstree
systemd─┬─ModemManager───2*[{ModemManager}]
├─NetworkManager─┬─dhclient
│ └─2*[{NetworkManager}]
├─2*[VBoxClient───VBoxClient]
├─2*[VBoxClient───VBoxClient───{VBoxClient}]
├─VBoxClient───VBoxClient───2*[{VBoxClient}]
├─VBoxService───7*[{VBoxService}]
├─2*[abrt-watch-log]
├─abrtd
├─accounts-daemon───2*[{accounts-daemon}]
├─alsactl
├─at-spi-bus-laun─┬─dbus-daemon───{dbus-daemon}
│ └─3*[{at-spi-bus-laun}]
├─at-spi2-registr───2*[{at-spi2-registr}]
ps命令为什么能知道所有进程的状态呢?我们知道进程是由内核管理的。每个进程对应内核来说,就是某个变量,内核把这个变量的信息存放在/proc/进程ip/目录下,ps命令就是读这些目录下的文件,来取得所有进程的状态的。
内核参数:linux哲学是一切皆文件,所以内核参数也是文件。
查看/proc/1下的文件(也就是1号进程,也就是systemd进程),每个文件存放的是内核参数的值
# pwd
/proc/1
# ls
attr cmdline environ io mem ns pagemap sched stack task
autogroup comm exe limits mountinfo numa_maps patch_state schedstat stat timers
auxv coredump_filter fd loginuid mounts oom_adj personality sessionid statm uid_map
cgroup cpuset fdinfo map_files mountstats oom_score projid_map setgroups status wchan
clear_refs cwd gid_map maps net oom_score_adj root smaps syscall
查看文件comm的内容:发现是启动1号进程的命令。
# cat comm
systemd
查看文件maps的内容:
此进程使用的堆(heap)所占用的内容空间是:55f9ef4c6000-55f9ef643000
此进程使用的栈(stack)所占用的内容空间是:7ffd27f9e000-7ffd27fbf000
此进程使用的动态库(/usr/lib64/ld-2.17.so)所占用的内容空间是:7f13ece84000-7f13ece85000
# cat maps
55f9ed91b000-55f9eda7c000 r-xp 00000000 fd:00 67757678 /usr/lib/systemd/systemd
55f9ef4c6000-55f9ef643000 rw-p 00000000 00:00 0 [heap]
7f13ea4ac000-7f13ea4b0000 r-xp 00000000 fd:00 33700674 /usr/lib64/libuuid.so.1.3.0
7f13ece84000-7f13ece85000 rw-p 00022000 fd:00 33637191 /usr/lib64/ld-2.17.so
7ffd27f9e000-7ffd27fbf000 rw-p 00000000 00:00 0 [stack]
直接用cat等命令去看文件里的内容太累了,所以有了各种各样的工具来帮助人去查看这些信息,ps就是其中的一个。
进程启动的方式:
查看与终端有关的进程:a
TTY:终端设备号
TIME:占用cpu的时间总和
# ps a
PID TTY STAT TIME COMMAND
5705 pts/0 Ss+ 0:00 bash
5901 pts/1 Ss+ 0:00 bash
5961 pts/2 Ss 0:00 bash
6062 pts/2 S 0:00 su - root
6073 pts/2 S+ 0:00 -bash
6171 pts/3 Ss 0:00 -bash
14173 pts/3 R+ 0:00 ps a
查看与终端无关的进程:x
由于与终端无关,所以TTY出没有终端设备号
COMMAND:这个进程是由那个程序启动的。由中括号的,是内核启动的线程
# ps x
PID TTY STAT TIME COMMAND
2 ? S 0:00 [kthreadd]
3 ? S 0:00 [ksoftirqd/0]
5 ? S< 0:00 [kworker/0:0H]
3793 ? Ssl 0:00 /usr/sbin/libvirtd
显示所有进程:ps ax
以用户的角度显示进程的信息:u
所有aux经常一起使用,显示的结果是以列PID排序的。
USER:启动进程的user
PID:进程号
%CPU:累计cpu使用时间
%MEM:使用内存比率
VSZ:占用的虚拟内存大小
RSS:常驻内存大小(不能放到swap和磁盘上的关键内容)
STAT:进程的状态
R:running(运行中)
S:interruptable sleeping(休眠中,但可以被唤醒)
D:unterruptable sleeping(休眠中,但不可以被唤醒)
T:Stoped(停止了)
Z:zombie(僵尸进程,父亲进程没有回收它)。
+:前台进程
l:启动了多线程的进程
N:低优先级进程
<:高优先级进程
s:session leader:在bash里运行了很多别的线程,所有bash就成了session leader;所以只要结束了session leader进程,则在它里面启动的进程就全被结束掉。
Ss 08:05 0:00 -bash
START:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 128272 6928 ? Ss 08:00 0:03 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0.0 0.0 0 0 ? S 08:00 0:00 [kthreadd]
root 13 0.0 0.0 0 0 ? S 08:00 0:00 [kdevtmpfs]
root 14 0.0 0.0 0 0 ? S< 08:00 0:00 [netns]
root 15 0.0 0.0 0 0 ? S 08:00 0:00 [khungtaskd]
dbus 3048 0.0 0.1 70204 4328 ? Ssl 08:00 0:05 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
rpc 3049 0.0 0.0 73648 1380 ? Ss 08:00 0:00 /sbin/rpcbind -w
avahi 3068 0.0 0.0 62144 400 ? S 08:00 0:00 avahi-daemon: chroot helper
libstor+ 3069 0.0 0.0 8576 824 ? Ss 08:00 0:00 /usr/bin/lsmd -d
ys 4771 0.0 0.0 317316 3880 ? Sl 08:01 0:00 /usr/bin/gnome-keyring-daemon --daemonize --login
gdm 4779 0.0 0.1 452196 4236 ? Sl 08:01 0:00 ibus-daemon --xim --panel disable
gdm 4782 0.0 0.0 375868 3524 ? Sl 08:01 0:00 /usr/libexec/ibus-dconf
ys 4788 0.0 0.2 818940 9444 ? Ssl 08:01 0:00 /usr/libexec/gnome-session-binary --session gnome-classic
gdm 4789 0.0 0.3 464772 13420 ? Sl 08:01 0:00 /usr/libexec/ibus-x11 --kill-daemon
ys 4804 0.0 0.0 59024 968 ? S 08:01 0:00 dbus-launch --sh-syntax --exit-with-session
显示所有进程:-e
带-的是BSD风格的选项,不带-的是UNIX的风格。
# ps -e
PID TTY TIME CMD
1 ? 00:00:03 systemd
2 ? 00:00:00 kthreadd
3 ? 00:00:00 ksoftirqd/0
5 ? 00:00:00 kworker/0:0H
7 ? 00:00:00 migration/0
和-e一起使用的还有-f:显示详细信息
PPID:父进程
C:CPU占用的百分比
STIME:运行启动的时间
TIME:累计CPU运行时间
# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 08:00 ? 00:00:04 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0 0 08:00 ? 00:00:00 [kthreadd]
还有个-F和-f类似
PSR:运行在那个cpu核心上。
# ps -eF
UID PID PPID C SZ RSS PSR STIME TTY TIME CMD
root 1 0 0 32068 6928 0 08:00 ? 00:00:04 /usr/lib/systemd/systemd --switched-root --system --deserialize
root 2 0 0 0 0 0 08:00 ? 00:00:00 [kthreadd]
root 3 2 0 0 0 0 08:00 ? 00:00:00 [ksoftirqd/0]
按父,子进程层级方式显示:-H
# ps -eFH
UID PID PPID C SZ RSS PSR STIME TTY TIME CMD
gdm 4779 1 0 113049 4236 0 08:01 ? 00:00:00 ibus-daemon --xim --panel disable
gdm 4782 4779 0 93967 3524 0 08:01 ? 00:00:00 /usr/libexec/ibus-dconf
自定义要显示的列。列于列之间用逗号分隔:o
# ps axo pid,command
PID COMMAND
1 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
BSD风格:ps -eo
# ps -eo pid,command | head -3
PID COMMAND
1 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
2 [kthreadd]
常用列:pid,ni(nice),priority(优先级),psr(运行在哪个核心上),pcpu(cpu的利用率),stat(状态),comm(启动的程序),tty(跟哪个终端相关),ppid(父进程id),rtprio(实时优先级)
nice:取值是-20到19,值越小优先级越高。作用是把自己的优先级降低(普通用户不能提高自己的优先级),让别的进程先执行,很礼让,所有叫nice。但管理员可以提高进程的优先级。
pgrep:根据进程的各个列的值,挑选出想查看哪些进程的信息。
pkill:根据进程的各个列的值,挑选出想给哪些进程发信号。
常用选项:
根据effictive user去查看进程:-u uid(或者用户名)
根据实际user去查看进程:-U uid(或者用户名)
# pgrep -U postfix
4322
14862
# id postfix
uid=89(postfix) gid=89(postfix) groups=89(postfix),12(mail)
# pgrep -U 89
4322
14862
# pgrep -u postfix
4322
14862
[root@localhost 1]# pgrep -u 89
4322
14862
根据terminal查看进程:-t
显示进程名:-l
# pgrep -lU postfix
4322 qmgr
14862 pickup
显示完整格式的进程名:-a
# pgrep -aU postfix
4322 qmgr -l -t unix -u
14862 pickup -l -t unix -u
显示其进程号下面的子进程:-P
root 3781 1 0 28189 4312 0 08:01 ? 00:00:00 /usr/sbin/sshd -D
root 6163 3781 0 41301 6116 0 08:05 ? 00:00:00 sshd: root@pts/3
# pgrep -aP 3781
6163 sshd: root@pts/3
根据字符串去查看ps出来的结果:ps key
查看有【ssh】字样的进程。
# pgrep ssh -a
3781 /usr/sbin/sshd -D
5023 /usr/bin/ssh-agent /bin/sh -c exec -l /bin/bash -c "env GNOME_SHELL_SESSION_MODE=classic gnome-session --session gnome-classic"
6163 sshd: root@pts/3
ps nginx
;ps httpd
等
根据进程名字,找到pid。
# pidof sshd
6163 3781
类似windows的任务查看器,动态变化。
不带参数top,是按CPU列逆序排序,占用cpu最高的进程在最上面。
# top
top - 15:55:33(当前时间) up 7:54(运行时长), 5 users(登录的用户数), load average(平均负载,等待运行的队列长度): 0.00(1分钟), 0.01(5分钟), 0.05(15分钟)
Tasks(多少个进程): 231 total, 3 running, 228 sleeping, 0 stopped, 0 zombie
%Cpu(s)(cpu占用百分比): 0.3 us(用户空间的进程占cpu的百分比), 0.7 sy(内核空间的进程占cpu的百分比), 0.0 ni(调整nice的百分比), 99.0 id(空闲百分比), 0.0 wa(等待io的百分比), 0.0 hi(处理硬件终端的百分比), 0.0 si(处理软件终端的百分比), 0.0 st(被虚拟化软件进程偷走的百分比)
KiB Mem(物理内存) : 3880620 total, 2183580 free, 737500 used, 959540 buff/cache(缓冲/缓存)
KiB Swap(交换分区): 4063228 total, 4063228 free, 0 used. 2813008 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
5078 ys 20 0 3025948 199132 68308 R 1.7 5.1 10:32.60 gnome-shell
1524 root 20 0 0 0 0 S 0.3 0.0 0:10.56 xfsaild/dm-0
uptime
命令能显示top命令结果的第一行:
# uptime
16:38:27 up 8:37, 5 users, load average: 0.07, 0.04, 0.05
VIRT:虚拟内存集;RES:常驻内存集;SHR:共享内存空间;S:当前状态;TIME+:运行时长
默认是按照%CPU列逆序排序的,可以改变排序的列:
在TOP执行时,可以交互输入的命令列表:
h:显示帮助
l,t,m :显示/非显示第一行,第二行,第三行
d or s:调整刷新间隔
k:杀死指定的进程
q:退出top
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
top命令的常用选项:
以批次方式显示,显示2批次后,自动退出top,刷新间隔是1秒。
# top -b -n 2 -d 1
top命令的升级版,在默认repo里没有,在epel里。
选项和top基本相同。
子命令:大部分和top相同,下面几个是htop独有的。
F1获取子命令的帮助信息。
vmstat [options][delay [count]]
查看内存的统计数据
delay:控制每几秒种显示一次
count:显示几次
每2秒种显示一次,一共显示3次:
# vmstat 2 3
查看一次就退出:
# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 2254396 3148 954228 0 0 145 16 88 90 1 1 98 0 0
procs:进程个数
memory:
swap:
可以通过swpd和swap的so来判断当前物理内存是否够用:如果swpd里有值,而且so的值很大,则说明物理内存不够,频繁需要从swap换进换出;如果swpd里有值,而so的值不大,则还可以忍受。
io:
system:
cpu:
常用选项:
查看内存使用的汇总信息:-s
# vmstat -s
3880164 K total memory
707772 K used memory
861212 K active memory
523236 K inactive memory
2164936 K free memory
3148 K buffer memory
1004308 K swap cache
4063228 K total swap
0 K used swap
4063228 K free swap
4633 non-nice user cpu ticks
3335 nice user cpu ticks
4878 system cpu ticks
1343696 idle cpu ticks
576 IO-wait cpu ticks
0 IRQ cpu ticks
353 softirq cpu ticks
0 stolen cpu ticks
941197 pages paged in
112819 pages paged out
0 pages swapped in
0 pages swapped out
763048 interrupts
860345 CPU context switches
1582090142 boot time
17373 forks
显示指定进程的内存映射表
pmap [options] pid [...]
pmap pid=cat /proc/pid/maps
常用选项:
显示详细信息:-x
RSS:常驻内存大小
Dirty:脏数据大小
Mode:读,写,执行的权限
# pmap -x 1
1: /usr/lib/systemd/systemd --switched-root --system --deserialize 22
Address Kbytes RSS Dirty Mode Mapping
000055bb2ebd1000 1412 1168 0 r-x-- systemd
000055bb2ef31000 140 132 132 r---- systemd
000055bb2ef54000 4 4 4 rw--- systemd
000055bb2f8fb000 1520 1464 1464 rw--- [ anon ]
00007f173c000000 164 12 12 rw--- [ anon ]
00007f173c029000 65372 0 0 ----- [ anon ]
00007f1744000000 164 12 12 rw--- [ anon ]
00007f1744029000 65372 0 0 ----- [ anon ]
00007f174aeb2000 4 0 0 ----- [ anon ]
00007f174aeb3000 8192 8 8 rw--- [ anon ]
00007f174b6b3000 4 0 0 ----- [ anon ]
00007f174b6b4000 9024 840 840 rw--- [ anon ]
00007f174c11c000 16 8 0 r-x-- libuuid.so.1.3.0
00007f174c120000 2044 0 0 ----- libuuid.so.1.3.0
用python研发的命令,在base仓库里没有,在epel里。
和top和htop差不多。
特点是支持c/s模式:可以在没有server的登录用户时,使用这种方式,监视server的各种信息。
server端:glances -s -B 本机某个网卡的ip地址
client端:glances -c 服务器的ip地址
需要安装,在base仓库里。
功能很强大,上面命令能查看的,dstat基本都能查看。
# dstat
You did not select any stats, using -cdngy by default.
----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
不使用任何参数就是使用:-cdngy
c:total-cpu-usage;d:dsk/total;n:net/total;g:paging;y:system
查看tcp各种状态下的连接的数量:
# dstat --tcp
----tcp-sockets----
lis act syn tim clo
13 1 0 0 0
查看最消耗cpu的进程是谁:--top-cpu
# dstat --top-cpu
-most-expensive-
cpu process
VBoxClient 0.0
VBoxlient 0.2
查看最消耗磁盘io的进程是谁:--top-bio
# dstat --top-bio
----most-expensive----
block i/o process
systemd 36k 18k
查看最消耗内存的进程是谁:--top-mem
# dstat --top-mem
--most-expensive-
memory process
gnome-shell 192M
延迟最大的进程是谁:--top-latency
# dstat --top-latency
--highest-total--
latency process
rcu_sched 292
ksoftirqd/2 9115
还有很多类似--top-xxx的选项
--tcp,--udp,--raw,--socket,--ipc
给进程发送信号。
有3种办法标识信号:
1,信号的数字标识
2,信号的完整名称:SIGHUP
3,信号的简写名称:HUP
查看有哪些信号:-l
# 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
# kill -l 1
HUP
# kill -l 2
INT
发送信号方法:
# kill -1 pid
# kill -SIGHUP pid
# kill -HUP pid
常用信号解释:
1)SIGHUP:无需关闭进程,让其从新读配置文件
2)SIGINT:终止正在运行的进程,相当于ctrl+c
9)SIGKILL:立即无条件终止正在运行的进程
15)SIGTERM:终止正在运行的进程。(进程打开的文件描述符等,关闭后,在结束自己)
18)SIGCONT:让后台运行的进程,回到前台运行。
19)SIGSTOP:让前台的进程去后台运行。
根据进程的名字,终止进程,所以符合名字的进程都会被终止。
# killall httpd
通过调整进程的nice值调整进程的优先级。只要管理员能调低nice值。
nice:取值是-20到19,值越小优先级越高。
用户空间的进程的优先级范围是:100~139,对应nice值-20~19。也就是说nice为-20的进程的优先级是100。优先级数字越小则越优先,niec值越小则越优先。
进程启动时,nice值是0,所以优先级是120.可以在启动时修改进程的nice值:
显示的15,其实是115,把前面的1省略了。
# nice -n -5 htop
# ps axo pid,priority,ni,comm | grep 344
344 15 -5 htop
进程启动后,也可以修改其nice:renice -n NICE pid ...
显示的20,其实是120,把前面的1省略了。
# ps axo pid,priority,ni,comm | grep 344
344 15 -5 htop
# renice -n 0 344
344 (process ID) old priority -5, new priority 0
# ps axo pid,priority,ni,comm | grep 344
344 20 0 htop
系统作业也叫job。
前台作业:通过终端启动,且启动后一直占据终端。
后台作业:可以通过终端启动,但启动后转入后台运行,释放终端。
运行中的作业:输入ctrl+z之后,作业转入后台,但不是运行状态,而是停止状态。
尚未启动的作业:command &
这种方法虽然能让作业进入后台运行,但依然依附于终端,一旦终端被终止,它也被终止了。
尚未启动的作业:nohup command &
让作业进入后台运行,且脱离终端。即使终端被终止,它也不会被终止。
jobs
fg 作业号
,就让指定的作业号的作业恢复到前台运行。
直接执行fg,则是让有加号的作业恢复到前台执行
# jobs
[1] Stopped htop
[2]- Stopped top
[3]+ Stopped dstat
# fg 1#回复htop命令到前台执行
终止指定的作业:kill %作业号
注意必须有%号
# kill %3
[3]+ Stopped dstat
# jobs
[1] Stopped htop
[2]- Stopped top
[3]+ Terminated dstat
2024-07-18
Centos 7 二进制安装配置 MariaDB数据库2024-07-18
Centos7默认firewalld防火墙使用命令大全2024-07-07
四种执行python系统命令的方法常用权限linux系统内有档案有三种身份 u:拥有者 g:群组 o:其他人这些身份对于文档常用的有下面权限:r:读权限,用户可以读取文档的内容,如用cat,more查看w:写权限,用户可以编辑文档x...
2024-07-07
然而,如果我们遵循通常的 WordPress 最佳实践,这些安全问题可以避免。在本篇中,我们会向你展示如何使用 WPSeku,一个 Linux 中的 WordPress 漏洞扫描器,它可以被用来找出你安装...
2024-07-03