欢迎光临
我们一直在努力

Linux进程

进程

1.进程概念
进程是一段正在运行的程序,其数据存储在内存中,他需要占用cpu,物理内存等系统资源
2.并发与并行
并发:在一段时间内,进程交替运行,让进程感受到是独自占用资源
并行:在同一个时间点上,进程同时运行
3.pcb(进程控制块)
本质是结构体,成员有:
pid(进程id):进程标识符
进程状态:比如初始态,就绪态,运行态等
进程切换时需要保存和恢复一些CPU寄存器
描述虚拟地址空间的信息
描述控制终端的信息
当前工作目录(Cueernt Working Directory)
umask掩码
文件描述符,包含很多指向file结构体的指针
和信号相关的信息
用户id和组id,stat
会话(Session)和进程组
进程可以适用的资源上线(Resource Limit),umilit -a
4.进程状态
在这里插入图片描述

进程控制

fork函数

使用系统调用创建一个与原进程一模一样的进程,系统会给新进程分配系统资源比如数据和代码空间等,然后将原进程的所有值复制到新进程里

函数原型:
pid_t fork(void);
两个返回值:
=0:当前进程为子进程
0:当前进程为父进程
‐1,出错

getpid:获取当前进程的pid
getppid():获取父进程的pid

在这里插入图片描述

fork函数ps:
1.用户数据一致,pid不一致
2.父进程和子进程的执行顺序不一定
3.各个进程的地址空间是独立的,读时共享,写时分别拷贝一份变量进行读写

vfork()函数

创建子进程,与父进程共同相同的地址空间,子进程对用户空间所做操作等同于父进程对用户空间做相同操作,且可以保证子进程先运行,子进程exit后,父进程才可运行

exec函数族

fork后父子进程会执行相同的操作
exec函数族会让父子进程执行不同的操作
修改进程的代码.text段,覆盖原本的代码
执行另外的操作,不需要创建新的地址空间

int execlp(const char *path, const char *arg,…
path为命令路径,第二个参数为占位符通常与第一个参数相同,后面的参数为命令行额外参数
l (list) 命令行参数列表
p (path) 搜素file时使用path变量
v (vector) 使用命令行参数数组
e (environment) 使用环境变量数组,不使用进程原有的环境变量,设置新加载程序运行的环境变量

孤儿进程与僵尸进程

孤儿进程:父进程结束后,子进程仍在运行,此时子进程会被init进程收养

僵尸进程:子进程结束后,其用户空间已被收回,但是子进程的pcb只能由父进程回收,父进程正在运行且未使用wait将子进程pcb回收,故会成为僵尸进程

进程回收

wait函数
作用:
1.阻塞进程并等待子进程退出
2.回收子进程资源
3.获取子进程退出的状态(退出原因)

pid_t wait(int *wstatus);
返回值:
‐1 : 回收失败,已经没有子进程了
0 : 回收子进程对应的pid
参数 :
status判断子进程如何退出状态
1.WIFEXITED(status):为非0 ,进程正常结束
WEXITSTATUS(status)
如上宏为真,使用此宏,获取进程退出状态的参数
2.WIFSIGNALED(status):为非0,进程异常退出
WTERMSIG(status):
如上宏为真,使用此宏,取得使进程种植的那个信号的编号
调用一次只能回收一个子进程

pid_t waitpid(pid_t pid, int *status, int options);
参数
1.pid: 指定回收某个子进程
pid == ‐1 回收所有子进程
while( (wpid=waitpid(‐1,status,0)) != ‐1)
pid > 0 回收某个pid相等的子进程
pid == 0 回收当前进程组的任一子进程
pid < 0 子进程的PID取反(加减号)
2.status: 子进程的退出状态,用法同wait函数
3.options:设置为WNOHANG,函数非阻塞,设置为0,函数阻塞
返回值:
0 :返回清理掉的子进程ID
‐1 :回收失败,无子进程
如果为非阻塞
=0 :参数3为WNOHANG,且子进程正在运行

进程退出

正常退出
1.main函数调用return
2.进程调用exit(),标准C库
3.进程调用 _exit() 或者 _Exit(),属于系统调用
4.进程最后一个线程返回
5.最后一个线程调用pthread_exit

异常退出
1.调用abort函数
2.当进程收到某些信号时,比如ctrl +C
3.最后一个线程对取消(cancellation)请求做出相应

赞(0)
未经允许不得转载:171主机测评 » Linux进程
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址