24-linux进程管理(一)
内核的功用:进程管理、文件系统管理、驱动管理,安全管理、网络功能管理
进程(process)是运行中程序的一个副本;
linux内核存储进程信息的固定格式叫task struck结构体(包含标识符、状态、优先级、程序计数器等信息)
进程创建:
fork函数是通过clone系统来完成创建进程的。这个调用来标识一下父进程和子进程之间共享的资源。
- 调用dup_task_struct()来创建一个内核栈,thread_info,task_struct等结构,一开始的时候其实父进程和子进程里面的资源和里都是一样的,此时子进程与父进程的进程描述符完全一致
- check 检查当前进程是否已经超过了系统的最大文件描述符
- 清除子描述符里面一些内容,使它与父进程分开。但是进程描述符不需要去改变就是直接复制就好了,因为主要起的是描述作用,而不是记录的作用
- 设置标志位,TASK_UNINTERRUPTIBLE 来保证该进程不会被投入使用
- copy-flags()用来更新struct_task的一些flags成员,
- get_pid()给进程一个pid号
- 根据传递给clone的参数标志,copy_process函数拷贝或共享打开文件,文件系统信息等、信号处理函数、进程地址空间和命名空间
- 让父进程和子进程平分剩余的时间片
- 最后copy_process会返回一个指向子进程的指针
进程优先级(1-139级)
1-99:实进优先级,数字越大优先级越高
100-139:静态优先级,数字越小优先级越高
进程的优先级(100-139)可通过调整nice值来设定其优先级,其中nice值-20,19分别对应进程优先级的100,139;
进程内存
page frame页框用于存储页面数据和进程数据
进程类型
守护进程:daemon,跟终端无关,在系统引导过程启动的进程
前台(交互式)进程:跟终端有关,通过终端启动的进程
注意:可以把交互式进程手动送往后台,以守护模式运行
进程状态
运行态:running
就绪态:ready
睡眠态:
可中断(interruptable):进程可由就绪态立即调度运行
不可中断(uninterruptable):当进程运行时需进行额外数据加载,且加载数据很大时,数据需从磁盘中IO至内核内存中,并最终IO至进程内存后才能由进程进行调度处理。由于数据加载过程可能需要的时间较长,因此无法进行中断;
停止态(stopped):进程暂停于内存中,且不会被调用,除非手动启动之
僵死态(zombie):进程执行完成后,结束需由父进程将子进程做删除处理时的状态
注意:僵死态如果父进程丢失,无法删除子进程时,将由init处理
linux系统上的进程查看及管理工具:pstree,ps,top,htop,glances,pmap,vmstat,dstat,kill,pkill,job,bg,fg,nohup
/sbin/init:所有用户进程都是由init管理并发送至内核处理
pstree命令
pstree - display a tree of processes 显示进程树
init─┬─auditd───{auditd}
├─crond
├─master─┬─pickup
│ └─qmgr
├─6*[mingetty]
├─rsyslogd───3*[{rsyslogd}]
├─sshd───sshd───bash───pstree
└─udevd───2*[udevd]
ps命令
ps - report a snapshot of the current processes.显示当前命令执行时的进程状态,与查看/proc目录下进程文件数据显示出来的结果一致
/proc/目录:内核的状态信息文件
内核参数:
可设置其值从而调整内核运行特性的参数,/proc/sys/目录
[root@centos-6 ~]# ll /proc/sys
total 0
dr-xr-xr-x 0 root root 0 Oct 25 16:34 abi
dr-xr-xr-x 0 root root 0 Oct 25 13:15 crypto
dr-xr-xr-x 0 root root 0 Oct 25 16:34 debug
dr-xr-xr-x 0 root root 0 Oct 25 16:34 dev
dr-xr-xr-x 0 root root 0 Oct 25 13:15 fs
dr-xr-xr-x 0 root root 0 Oct 25 13:15 kernel
dr-xr-xr-x 0 root root 0 Oct 25 13:15 net
dr-xr-xr-x 0 root root 0 Oct 25 13:15 vm
状态变量:其用于输出内核中统计信息或状态信息,仅用于查看
参数:模拟成文件系统类型
进程文件位置:/proc/#,#为PID
启动进程的方式:
系统启动过程中自动启动:与终端无关的进程
用户通过终端手动启动:与终端相关的进程
ps a:显示所有与终端相关的进程
ps u:显示所有以用户为中心进程状态信息
ps x:显示所有与终端无关的进程
[root@centos-6 ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 19232 1496 ? Ss 13:15 0:01 /sbin/init
root 2 0.0 0.0 0 0 ? S 13:15 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 13:15 0:00 [migration/0]
root 4 0.0 0.0 0 0 ? S 13:15 0:00 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S 13:15 0:00 [stopper/0]
root 6 0.0 0.0 0 0 ? S 13:15 0:00 [watchdog/0]
root 7 0.0 0.0 0 0 ? S 13:15 0:00 [migration/1]
VSZ:虚拟内存集
%CPU:CPU占比
%MEM:内存占比
RSS:常驻内存集,指的是不能放到交换内存中的数据
STAT:当前进程的状态
R:running
S:interruptable sleeping 可中断睡眠
D:uninterruptable sleeping 不可中断睡眠
T:stopped 停止态
Z:zombie 僵死态
+:前台进程(运行在终端上的)
l:多线程进程
N:低优先级进程
<:高优先级进程
s:session leader,会话领导者,相当于父进程
ps -e 显示所有进程
ps -f 显示完整格式的进程信息
ps -F 显示完整格式的进程信息,比-f更详细
1044 crond
1044 /usr/sbin/crond -n
3563
浙公网安备 33010602011771号