Linux进程概念

2019-07-14 10:40发布

进程概念:

进程 : 进行中的程序(用户角度), 运行一个程序需要描述一个程序的运行,通过一个task_struct结构体描述,统称为PCB(操作系统角度)
程序 : 一堆代码, 存储在硬盘中, 程序运行起来就会被加载到内存中,删除硬盘中的程序,并不会使进程关闭
操作系统管理进程 : 描述进程, PCB—struct task_struct{} 操作系统通过PCB来管理运行中的程序, 其本质是一个task_struct结构体
描述信息 : 进程标识符(PID) , 进程状态, 优先级, 程序计数器, 上下文数据, 记账信息 内存指针, IO状态信息等 查看进程信息 cat /proc/self/limits 查看详细的当前进程的资源限制,普通用户修改资源上限值,最大不超过硬限制,root用户可超过限制 /proc 进程运行信息存放目录 ps -ef -aux -ajx 查看系统上的进程信息 getpid() 获取调用进程的进程ID env 查看当前进程的环境变量 杀死进程: kill -9 pid 杀死进程 kill -9 -pid 杀死进程组 通过系统调用创建进程:
  #include
  pid_t fork(void);
  通过复制调用进程,创建一个子进程
  子进程复制的就是父进程的PCB(父子进程数据, 代码看起来都一样)
  特点: 代码共享, 数据独有
进程状态:
  运行R, 可中断睡眠S, 不可中断睡眠D, 停止T, 死亡X, 僵死Z
僵尸进程:
子进程结束运行后,没有被父进程回收PCB,这种情况导致系统资源泄露
产生僵尸进程的代码: int main() { int pid = fork(); if(pid > 0) { while(1) { printf("i'm parent %d ", getpid()); sleep(1); } } if(pid == 0) { printf("i'm child %d ", getpid()); } } 孤儿进程:
父进程先于子进程结束,子进程称为孤儿进程,子进程的父进程成为1号进程,init进程,init进程领养孤儿进程
产生孤儿进程的代码 int main() { int pid = fork(); if(pid > 0) { while(1) { printf("i'm parent %d ", getpid()); } } if(pid == 0) { while(1) { printf("i'm child %d ", getpid()); sleep(1); } } } 守护进程:
  脱离了与终端和会话的关联的孤儿进程
进程优先级:
  优先级: 决定资源的优先分配权的等级划分
为什么要有优先级:
  让操作系统运行的更加合理
  交互式进程: 一旦有操作, 优先处理
  批处理进程: 一直处理数据, 但是对cpu要求不高
  设置: ps -efl
  PRI 优先级 NI nice值: PRI无法直接设置, 但是可可以通过设置NI值,调整PRI至
  PRI = PRI + NI
  renice -n size -p pid