linux 进程管理
linux进程:
内核的功用: 进程管理,文件系统,网络功能,内存管理,驱动程序,安全功能。
1、在用户空间里运行的进程,就是用户进程,所属的状态为用户态
2、在内核空间里运行的进程,就是系统进程,所属的状态为内核态
process是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源(内存、CPU)分配和调度的一个独立单位
1、进程控制块(PCB)
是系统感知进程存在的唯一凭证,是数据结构,占用内存空间。
2、进程上下文
1、上文:已执行过的进程指令和数据在相关寄存器和堆栈中的内容称为上文。
2、正文:正在执行的指令和数据在相关寄存器和堆栈中的内容。
3、下文:待执行的指令和数据在相关寄存器和堆栈中的内容。
进程上下文切换:
指多任务系统中,CPU的控制权由运行任务,转移到另外一个就绪任务时所发生的事件;当前运行任务转为就绪(或者挂起、删除)状态,另一个被选定的就绪任务成为当前任务
一个进程包含多个属性参数,这些参数决定了进程被处理的先后顺序、能够访问的资源等
常用参数:
PID:进程的ID。
PPID:父进程的ID。应用程序只能通过克隆自己来产生新的进程。子进程应该是父进程的克隆体。
UID和EUID:真实和有效的用户ID。
GID和EGID:真实和有效的组ID。
谦让度和优先级:进程的优先级决定了受到CPU‘优待的程度,优先级越高的进程能够更早的被处理,并获得更多的处理器时间。绝大多数下进程何时被处理是内核的事,用户不需要 插手,用户可以通过设置进程的‘谦让度’来影响内核的想法。谦让度与优先级是相反的,高谦让度意味着低优先级。用户可以吧它谦让度设置低一些,让进程更早的被处理。
监视进程:ps命令
最常用的方法是ps aux,然后再通过管道使用grep命令过滤查找特定的进程,然后再对特定的进程进行操作。
ps aux | grep program_filter_word,ps -ef |grep tomcat
ps aux命令用于显示当前系统运行的所有进程的信息。
[songshichao@song ~]$ ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 1.1 0.4 128164 6820 ? Ss 21:51 0:03 /usr/lib/systemd/syst root 2 0.0 0.0 0 0 ? S 21:51 0:00 [kthreadd]
......
root 648 0.0 0.0 84500 888 ? S<sl 21:51 0:00 /sbin/audispd
root 650 0.0 0.0 24052 900 ? S< 21:51 0:00 /usr/sbin/sedispatch
libstor+ 672 0.0 0.0 8532 804 ? Ss 21:51 0:00 /usr/bin/lsmd -d
dbus 673 0.3 0.2 36388 3352 ? Ssl 21:51 0:00 /bin/dbus-daemon --sy
USER :进程创建者的用户名。
PID :进程的ID。
%CPU:进程占用CPU的百分比。
%MEM:进程占用内存的百分比。
VSZ:进程占用的虚拟内存的大小。
RSS:内存中的也的数量(页是管理内存的单位,在pc通常为4k)
STAT:进程状态,常用字母如下:
R:正在运行 ;D:睡眠中(不可被唤醒,通常是在等待I/O设备);S:睡眠中(可以被唤醒);T:停止;Z:僵进程(已经结束但没有释放系统资源)
常用附加标志:<:进程拥有比普通优先级高的优先级;N:进程拥有比普通优先级低的优先级;L:有些页面被锁在内存中;s:会话的先导程序;+:前台进程;l:多线程进程;
ATART:线程启动时间。
TIME:进程已占用的CPU时间。
COMMAND:命令和参数。
ps lax 命令提供父进程(PPID)和谦让度(NI)
[songshichao@song ~]$ ps lax F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND 4 0 1 0 20 0 128164 6820 ep_pol Ss ? 0:03 /usr/lib/systemd 1 0 2 0 20 0 0 0 kthrea S ? 0:00 [kthreadd] 1 0 3 2 20 0 0 0 smpboo S ? 0:00 [ksoftirqd/0]
pstree命令以树状图的方式展现进程之间的派生关系,显示效果比较直观
ps -ef 命令显示所有进程信息,连通命令行
top命令,即时跟踪进程信息,显示的信息会占满一页,自动更新,使用CPU最多的程序会排在最前面。用户可以即时观察当前系统CPU使用率,内存占有率等,使用q退出这个监视程序
[songshichao@song ~]$ top top - 22:24:50 up 33 min, 2 users, load average: 0.00, 0.01, 0.09 Tasks: 182 total, 1 running, 181 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.3 us, 0.7 sy, 0.0 ni, 98.7 id, 0.2 wa, 0.0 hi, 0.2 si, 0.0 st KiB Mem : 1646888 total, 481764 free, 680660 used, 484464 buff/cache KiB Swap: 2097148 total, 2097148 free, 0 used. 756604 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 700 root 20 0 305296 6296 4916 S 1.0 0.4 0:03.71 vmtoolsd 1805 songshi+ 20 0 2080076 190236 51904 S 0.7 11.6 0:31.08 gnome-shell 3203 songshi+ 20 0 157716 2264 1548 R 0.7 0.1 0:00.29 top
lsof命令,查看占用文件的进程,获得某个特定文件正在被哪些进程使用,需要提供文件名。如果不写就累出当前系统所有打开文件的进程信息。
free命令可以显示当前系统未使用的和已使用的内存数目,还可以显示被内核使用的内存缓冲区。
kill命令,向进程发送信号。
kill [-signal] pid
kill 12974 等同于 kill -TERM 12974
kill -9 pid #强制关闭
sudo kill -KILL pid :在内核的级别上杀死一个进程,绝大多数情况下可以确保结束进程号PID的进程
nice和renice :调整进程的谦让度
nice命令可以在启动程序的时候设置其谦让度 ,谦让度的值应该在-20~+19之间浮动
nice -n 2 bc :设置bc以谦让度增量2启动
nice bc : 将谦让度增量设置为10
renice命令可以在进程运行的时候调整其谦让度。
renice +12 -p 8567# -p选项制定进程的PID,此命令将bc程序谦让度调整为12