使用 ps 观察程序
ps -l
ps
程序可以查询当前在运行的进程信息。ps -l
可以列出详细的信息,默认仅列出当前 bash 相关的进程。
sudo -i
ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 2133 2113 0 80 0 - 3026 do_sys pts/0 00:00:00 sudo
4 S 0 2134 2133 0 80 0 - 2651 do_wai pts/0 00:00:00 bash
4 R 0 2146 2134 0 80 0 - 2854 - pts/0 00:00:00 ps
F
代表程序旗标,表明程序的一些性质,图中 4 代表是 root 执行。
S
代表该程序的运行状态。
字母 | 状态 |
---|---|
R | Running 运行中 |
S | Sleep 休眠中,随意可以唤醒 |
D | Disk Sleep 深入休眠,通常正在进行磁盘IO,不可唤醒 |
T | Stopped 暂停状态 |
Z | Zombie 进程已结束,但父进程没有回收 |
UID 是进程执行者的 UID, PID 就是进程的 ID,PPID 就是父进程的 PID。
PRI 和 NI 代表程序的执行优先级,越小则越优先执行。
C 代表程序的CPU占用率。ADDR 和 SZ 和内存相关,代表内存中的位置和占内存大小。WCHAN 表示 waiting channel 表明程序的等待运行进度。TIME代表该程序占用CPU运行的时间。
TTY 表示所在的终端,本地终端是TTY,其他则是动态的虚拟终端 pts。CMD 代表是哪个程序指令。
ps aux
ps aux
或者ps -aux
可以查看当前所有进程(两种不同的参数风格)。
ps aux | head -n 4
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.2 102724 11524 ? Ss 01:51 0:01 /sbin/init auto noprompt
root 2 0.0 0.0 0 0 ? S 01:51 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? I< 01:51 0:00 [rcu_gp]
这和ps -l
的信息基本是一样,RSS表示使用的物理内存大小,VSZ表示使用的虚拟内存大小,TTY为 ? 表示该进程并不在任何终端下运行。Start 表明该程序开始运行的时间。
top
top 可以动态查看几秒钟内各进程的信息,不过他可以按照内存使用,CPU占用等排序,可以更直观的查看资源使用信息。
pstree
pstree
可以把当前进程的父子调用关系绘制成一个树形图,便于查看他们的关系。
向程序发送信号
在 linux 中,与程序交互的重要手段之一就是向程序发送信号。kill
可以用于发送信号,kill -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
63) SIGRTMAX-1 64) SIGRTMAX
使用 kill -signalnumber PID
可以向对应 PID 的程序发送信号。
kill -9 1000 # -9即 kill 信号,强制要求程序退出,这是最常用的
kill -15 %2 # %开头表示背景工作号,-15表示要求正常结束
程序的优先级
每个进程都有一个PRI数值(priority)和 NI 数值(nice),这两个数字加起来就是程序的优先级,越低越优先。
为什么要设置两个数值呢?因为 PRI 是内核算出来的,不可更改的数,NI 则是用户可以手动调整的。通过调整 NI,就可以一定程度上自订程序的优先级。
# nice 命令
nice -n 10 command # 赋值 ni=10 的命令
renice 10 PID # 修改已有进程的 ni 值
root 可以修改所有进程的 NI 值,范围(-20 ~ 19),而一般用户只能调整自己进程的值,范围(0~19)。
查询程序打开的文件
fuser 查询一个文件或目录的使用者。
~$ fuser -v . # -v 查看详细信息
USER PID ACCESS COMMAND
/home/ubuntu: ubuntu 225862 ..c.. bash
相对的,lsof 查询程序已经打开的文件
lsof [-adu] # 列出程序打开的文件
+d: 限定目录
-u: 限定文件
-a: 需要多个条件同时满足
lsof -u ubuntu
# 太多了!而且不能指定pid,所以只能用grep选中要查看的程序了
lsof -a -u ubuntu +d .
pidof 可以快速根据命令名查找pid,默认会找出所有的pid
pidof bash
225862
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:linux 基础(10)进程管理 - Python技术站