操作系统-----进程

程序和进程

程序:是存放在磁盘中的 可执行文件
进程:程序的执行实例
进程ID:每个linux进程都有一个唯一的数字标识符,进程ID总是一非负数。

内核中的进程结构

tty_struct
files_struct 指向文件描述符
task_struct 进程表项
task_struct
存放内核源码

C程序启动过程

启动例程
在进程的main函数执行之前内核就会启动
编译器在编译时就会将启动例程编译进可执行文件中
启动例程的作用: 搜集命令的参数传递给main函数中的argc和argv
搜集环境信息构建环境并且传递给main函数
登记进程的终止的函数

进程终止

正常终止:
从main函数返回
调用exit(标准c库函数)
调用_exit或_Exit(系统调用)
最后一个线程从其启动例程返回
最后一个线程调用pthread_exit
异常终止:
调用abort
接受一个信号并终止
最后一个线程取消对请求做处理响应
进程返回:
通常程序运行成功返回0。否则返回非0
在shell中可以查看进程返回值 (e’cho $?)

atexit 函数

#include<stdlib.h>
int atexit(void (*function)(void ))

进程终止方式的区别

在这里插入图片描述

进程启动和退出
在这里插入图片描述

通过ps指令可以看到进程的ID,进程用户的ID
PS 输出的信息
USER进程的属主;
PID进程的ID;
PPID 父进程;
%CPU 进程占用的CPU百分比;
%MEM占用内存的百分比;
NI 进程的NICE值,数值大,表示较少占用CPU时间;
VSZ 进程虚拟大小;
RSS 驻留中页的数量;
TTY 终端ID
WCHAN 正在等待的进程资源;
START 启动进程的时间;
TIME进程消耗CPU的时间;
COMMAND 命令的名称和参数

进程常见状态:

运行状态 系统当前进程 就绪状态进程 ps命令的STAT列为值R
等待状态 等待事件发生 等待系统资源 ps命令的STAT列为值S 停止状态 ps命令的STAT列为值T
僵尸状态 进程终止或结束 在进程表项中仍有记录 ps命令的STAT列为值Z

进程调度

第一步:处理内核中的工作
第二步:处理当前进程
第三步:选择进程

  1. 实时进程
  2. 普通进程

第四步:进程交换
task_struct 中的调度信息
进程状态变化关系
在这里插入图片描述
进程标识 PID ,用户标识 UID ,用户

#include <unistd.h> 
#include <sys/types.h>
 pid_t getpid(void):获得当前进程ID 
 uid_t getuid(void):获得当前进程的实际用户ID
 uid_t geteuid(void):获得当前进程的有效用户ID 
 gid_t getgid(void):获得当前进程的用户组ID 
 pid_t getppid(void):获得当前进程的父进程ID 
 pid_t getpgrp(void):获得当前进程所在的进程组ID 
 pid_t getpgid(pid_t pid):获得进程ID为pid的进程所在的进程组ID

非局部跳转

进程资源限制

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值