概述
一,基本概念
1.1、进程与程序
程序:存储在磁盘上的文件,包含可执行指令和数据的静态实体。
进程:运行中的程序(一个程序可以执行多次,加载出多个进程)。
进入就是处于活动状态的计算机程序。
2、进程的分类:
交互进程:有输入、输出,用户可以根据自己的情况输入数据,得到想要的结果(一般进程)。
批处理进程:由脚本加载执行的程序(Linux下的shell,windows下的bat)。
守护进程:总是活跃的、后台运行,一般由系统开机时加载执行或root用户手动加载执行。
3、查看进程
简单方式:ps,显示当前用户有终端控制权的进程信息。
列表形式:ps aux,以列表形式显示详细信息
a 所有用户的终端控制进程
x 所有用户的无终端控制的进程
u 详细方式显示
4、进程的详细信息列表
USER 进程的属主
PID 进程id
%CPU CPU使用率
%MEM 内存使用率
VSZ 占用虚拟内存的大小
RSS 占用物理内存的大小
TTY 有终端控制的显示终端的次设备号,如果无终端控制树显示?
STAT 进程的状态
O 就绪态,等待被系统调度。
R 运行态,Linux系统没有就绪态,就绪态也用R表示。
S 休眠态,可以被系统中断(信号)唤醒转入运行态。
T 暂停态,是被SIGSTOP信号暂停的,当收到SIGCONT信号时才能再转入运行态。
Z 僵尸态,已经结束停止运行,但父进程还没有回收。
< 高优先级进程
N 低优先级进程
l 多线程化的进程
+ 在前台进程组中的进程
s 会话首进程
START TIME 进程开始时间
COMMAND 进程的可执行文件名
5、父进程与子进程,孤儿进程与僵尸进程
一个进程A可以创建出另一个进程B,创建者叫父进程,被创建进程叫子进程,父进程启动子进程后,在操作系统的调用下父进程同时执行(同步)。
如果子进程先于父进程结束,会向父进程发送SIGCHLD信号,父进程收到信号后,就应该去回收子进程的相关资源,但在默认情况下,父进程忽略该信号。
也就是说,当子进程结束后,父进程没有回收子进程的资源,那么子进程就变成了僵尸进程。
如果父进程先于子进程结束,子进程就变成了孤儿进程,同时被孤儿院收养(init),然后就变成了init的子进程。
二、进程标识符
操作系统会为每个进程分配一个唯一的标识符,采用无符号整数表示,即进程ID。
进程ID在任何时候都是唯一的,但是可以重用,当一进程结束,新创建的进程才可以使用它的进程ID(延时重用)。
pid_t getpid(void);
功能:获取进程ID
pid_t getppid(void);
功能:获取父进程ID
uid_t getuid(void);
功能:获取当前进程的用户ID
gid_t getgid(void);
功能:获取当前进程的组ID
三、fork
pid_t fork(void);
功能:创建一个新进程。
返回值:一次调用两次返回,失败返回-1(当进程数走出系统的限制进程创建就会失败)。
1、两人次返回分别是进程ID和0,父进程会拿到子进程的ID,子进程返回0,借此可以分别出父子进程,编写不同的处理分支。
2、通过fork创建的子进程就是父进程的副本(拷贝)
子进程会获取父进程数据段、bss段、堆、栈、IO流(共享文件指针和文件描述符)、缓冲区的拷贝,与父进程共享代码段。
3、子进程会继承父进程的信号处理方式。
4、fork函数调用后,父了进程各自执行,谁先返回不一定,但可以使用一些手法来确定谁先执行。
最后
以上就是高挑芝麻为你收集整理的进程的基本概念和理解的全部内容,希望文章能够帮你解决进程的基本概念和理解所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复