首页 > 系统相关 >进程编程基础

进程编程基础

时间:2022-12-25 20:34:54浏览次数:47  
标签:函数 exec 编程 基础 exit 进程 环境变量 wait

fork()

fork()函数用于从已存在的进程中创建一个新进程。

新进程称为子进程,而原进程称为父进程。

使用fork()函数得到的子进程是父进程的一个复制品,它从父进程处继承了整个进程的地址空间,包括进程上下文、代码段、进程堆栈、内存信息、打开的文件描述符、信号控制设定、进程优先级、进程组号、当前工作目录、根目录、资源限制和控制终端等,而子进程所独有的只有它的进程号、资源使用和计时器等。

 

 

exec函数族

fork()函数是用于创建一个子进程,该子进程几乎拷贝了父进程的全部内容,但是,这个新创建的进程如何执行呢?这个exec函数族就提供了一个在进程中启动另一个程序执行的方法。

exec函数族成员函数语法:

 

查找方式
表中的前四个函数的查找方式都是完整的文件目录路径,而最后两个函数(以p结尾的函数)可以只给出文件名,系统就会自动从环境变量“$PATH”所指出的路径中进行查找。
参数传递方式
两种方式:逐个列举、将所有参数整体构造指针数组传递
以函数名的第五位字母来区分的,字母为“l”(list)的表示逐个列举的方式,其语法为char *arg;字母为“v”(vertor)的表示将所有参数整体构造指针数组传递,其语法为*const argv[]
环境变量
exec函数族可以默认系统的环境变量,也可以传入指定的环境变量。这里,以“e”(Enviromen)结尾的两个函数execle、execve就可以在envp[]中指定当前进程所使用的环境变量

 

exec函数执行失败,常见原因:
找不到文件或路径,此时errno被设置为ENOENT;
数组argv和envp忘记用NULL结束,此时errno被设置为EFAULT;
没有对应可执行文件的运行权限,此时errno被设置为EACCES。

 

exit()和_exit()

exit()和_exit()函数都是用来终止进程的。当程序执行到exit()或_exit()时,进程会无条件地停止剩下的所有操作,清除包括各种数据结构,并终止本进程的运行。

 

exit()和_exit()的区别
_exit()函数的作用是直接使进程停止运行,清除其使用的内存空间,并销毁其在内核中的各种数据结构;
exit()函数则在这些基础上作了一些包装,在执行退出之前加了若干道工序。
exit()函数与_exit()函数最大的区别就在于exit()函数在终止当前进程之前要检查该进程打开过哪些文件,把文件缓冲区中的内容写回文件,就是图中的“清理I/O缓冲”一项。

 

 

 

 

wait()和waitpid()

 

wait()函数是用于使父进程(也就是调用wait()的进程)阻塞,直到一个子进程结束或者该进程接到了一个指定的信号为止。如果该父进程没有子进程或者他的子进程已经结束,则wait()就会立即返回。

 

waitpid()的作用和wait()一样,但它并不一定要等待第一个终止的子进程,它还有若干选项,如可提供一个非阻塞版本的wait()功能,也能支持作业控制。

 

 

 

 

标签:函数,exec,编程,基础,exit,进程,环境变量,wait
From: https://www.cnblogs.com/cnetsa/p/17004525.html

相关文章

  • 【编程基础】正则表达式基本使用及在Python中使用正则表达式匹配内容
    前言当接触一个新知识点或者技术时,只要问完哲学中的三大问题,基本就对这个知识点或者技术有大致的了解,这也是我学习一个新技术常用的方法,那到底是哪三大问题呢?是什么?怎么做,为......
  • 标准I/O编程
    标准I/O提供流缓冲的目的是尽可能减少使用read()和write()等系统调用的数量。标准I/O提供了3种类型的缓冲存储。全缓冲:在这种情况下,当填满标准I/O缓存后才进行实际I/O操......
  • 【编程实践】出行无忧,利用Python爬取天气预报
    前言天气预报就是应用大气变化的规律,根据当前及近期的天气形势,对某一地未来一定时期内的天气状况进行预测。它是根据对卫星云图和天气图的分析,结合有关气象资料、地形和季节......
  • 用户编程接口
    在Linux中,用户编程接口(API)遵循了在Unix中最流行的应用编程界面标准——POSIX标准。POSIX标准是由IEEE和ISO/IEC共同开发的标准系统。该标准基于当时现有的Unix实践和经验,描......
  • 实验6 文件应用编程
    1#define_CRT_SECURE_NO_WARNINGS2#include<stdio.h>3intmain()4{5intnum=0;6FILE*fp;7charch;8if((fp=fopen("data4.tx......
  • 《并发编程入门》总结篇
    前言本文是《Java并发视频入门》视频课程的笔记总结,旨在帮助更多同学入门并发编程。本系列共五篇博客,此文为五篇博客的汇总篇。目录​​并发编程入门(一):多线程基础_......
  • Java编程思想11
    第十六章:数组Java中已经有了容器,为什么还需要数组呢,是因为数组可以持有基本类型吗?但是在泛型出来之后,通过自动包装机制,其实通过容器也能够持有基本类型。在Jav中,数组是一种......
  • Java编程思想12
    第十七章:容器深入研究完整的容器分类法:这张图是把工作中常用到的实现类和相关接口使用UML类图辨识出来  JavaSE5新添加了:Queue接口及其实现PriorityQueue和各种风......
  • Java编程思想10
    第十五章:泛型我们希望达到的目的是编写更通用的代码,要使代码能够应用于“某种不具体的类型”,而不是一个具体的接口或类。简单泛型​有许多原因促进了泛型的出现,而最引人......
  • Go基础-上
    1、搭建Go开发环境下载SDK下载地址:https://golang.google.cn/dl/darwin是mac下的sdkpkg是图形化安装包tar.gz是解压就可以使用freebsd是unix下的sdklinux如果......