Linux进程概述
进程控制块:PCB,进程控制块包含了进程的描述信息、控制信息以及资源信息,它是进程的一个静态描述。内核使用进程来控制对CPU和其他系统资源的访问,并且使用进程来决定在CPU上运行哪个程序,运行多久以及采用什么特性运行它,内核的调度器负责在所有的进程间分配CPU执行时间,称为时间片,它轮流在每个进程分得的时间片用完后从进程那里抢回控制权。
进程标识
OS会为每个进程分配一个唯一的整型ID,作为进程的标识号(pid),进程除了自身的ID外,还有父进程ID(ppid),所有进程的祖先进程是同一个进程,它叫做init进程,ID为1,init进程是内核自举后的一个启动进程。init进程负责引导系统、启动守护(后台)进程并且运行必要的程序。进程的pid和ppid可以分别通过函数getpid()和getppid()获得。
真实用户ID:getuid()
真实组ID:getgid()
有效用户ID:geteuid()
有效组ID:getegid()
ls -l etc/shadow //用户的密码保存在etc/shadow中
//用户的用户名和密码是保存在/etc/passwd里,后来专门把密码保存在/etc/shadow里
cat /proc/cpuinfo //查看CPU信息
ps -aux //查看所有的进程的CPU,内存占用率
ps -aux|grep 'a' //查找指定(a)进程
ps -ef //显示父子进程关系
ps -elf //查看所有进程
top //显示前20条进程,动态的改变,占用率(q)
权限提升:对权限的查看及其有效ID
which passwd //查看passwd这个命令在哪个路径
ls -l /usr/bin/passwd //passwd是属于root的,-rwsr-xr-x里面的s就是权限提升,当任何用户,使用passwd的时候,权限会变成root(该命令的持有者)u+s
st_mode 高四位1111代表文件类型,低9位代表权限111 1 1111 1111
chmod u+s a.out 权限提升与文件拥有者一样,只针对可执行文件,变红
tmp drwxrwxrwt 里面的t代表每个人自己回收自己的文件(粘着位),只能o+t(其他用户),注意文件的拥有者
vim /etc/sudoers //查看sudo的配置表
在Linux系统,进程是os的最小单元,os会为每个进程分配大小为4g的虚拟内存空间
4g的虚拟内存:1g分给内核空间,3g分到用户空间(三个段)
Linux进程包含三个段:数据段,代码段和堆栈段
数据段:存放全局变量、常数以及动态数据分配的数据空间
代码段:存放程序代码的数据
堆栈段:存放子程序的返回地址,子程序的参数以及程序的局部变量
R:运行 S:睡眠 T:暂停状态或者跟踪状态 Z:退出进程,僵尸进程
用户态与内核态
中断分为软中断和硬中断
嵌入式编程需要严谨控制优先级
调度策略(140个优先级)(-40 ~ 99)
实时调度 FIFO RR 100个优先级
普通调度 OTHER 40个优先级(60 ~ 99)
数字越低,优先级越高
优先级最高:watchdog,等级为-40
调度策略有两种,优先级为-40到99(140个优先级)
<1>实时调度策略(FIFO先进先出 RR轮转)-40到59 -40最高 航天航空 飞机 Linux系统 watchdog的优先级是-40
<2>普通调度策略(OTHER)60到99 生活中和工作中一般都是普通调度策略
man sched//调度的接口
监控进程每5秒监控业务进程是否挂掉,假如挂掉则把该业务进程拉起来
相当于./a.out,程序员查看日志,复现崩溃和查到崩溃原因。
renice -n 10 -p 100303//对进程优先级的增加(+10)
top投票
进程的管理
通过中断可以进入内核,程序执行在用户态(for循环,开方);
而read和write是系统调用,运行在内核态。
kill -2等价于ctrl+c(让进程在后台处于暂停状态)
常用kill -9 进程号 关机信号
假如kill了bash进程,终端窗口会被关
bg命令:将挂起的进程放到后台执行
18号是继续信号,kill -18 99999,可以发送继续信号给99999号进程,使其从s转到r
gdb信号就是continue之后马上发暂停
fg 1或fg 2 可以使后台程序拉到前台:与bg组合使用
./a.out & 可以使函数直接在后台运行
jobs 显示后台的所有进程