当前位置: 首页 > news >正文

进程的创建

#include<unistd.h>
pid_t fork(void);

创建一新进程,如果成功创建子进程,总是返回0,子进程的数据不会影响父进程的数据,不过文件相关属性会有影响,例如子进程中修改文件偏移量,父进程中的也跟着变(父进程中用wait或者sleep函数使得子进程得以运行)

#include<unistd.h>
pid_t vfork(void);

创建一个新的子进程,该子进程是为立即执行exec(),成功总是返回0。相对与fork(),vfork()无需为子进程复制虚拟页或页表,相反子进程共享父进程的内存(将会影响父进程数据),在exec()或者_exit()之前,将暂停执行父进程,但是对文件描述符的操作不会影响父进程,而且子进程优先父进程获得cpu使用权,fork()则是父进程优。不过不推荐使用该函数,除非速度绝对重要


void _exit(int status); //status参数定义了进程的终止状态,父进程可调用wait()以获取该状态,0代表成功推出,非0代表异常退出,不刷新stdio缓冲区,不常用,一般用下面的exit()
int exit(int status);   //return n等同exit(n),刷新stdio缓冲区
int atexit(void(*func)(void));  //注册退出处理程序
int on_exit(void(*func)(int,void *),void *arg); //传递俩个参数给func(),提供给exit()的status参数和注册时供给on_exit()的一份arg参数拷贝。该函数可移植性差

#include<sys/wait.h>
pid_t wait(int *status);//等待调用进程的任一子进程终止,用status返回子进程的终止状态
pid_t waitpid(pid_t pid,int *status,int options);
//pid用来表示需要等待的具体子进程,如果pid大于0,表示等待进程为pid的子进程,等于0,等待与父进程同一进程组的所有子进程,小于-1,等待进程组标识符与pid绝对值相等的所有子进程,等于-1,等待任一子进程,options的值如下
WUNTRACED   除了返回终止子进程的信息外,还返回因信号而停止的子进程信息
WCONTINUED  返回那些因收到SIGCONT信号而恢复执行的已停止子进程的状态消息
WNOHANG     如果pid所指定的子进程并未发生状态改变,则立即返回,而不会阻塞

这里写图片描述

int waitid(idtype_t idtype,id_t id,siginfo_t *infop,int options);
若idtype为P_ALL,则等待任何子进程,同时忽略id的值
如果为P_PID则等待进程idid的子进程
如果为P_PGID,则等待进程组idid各进程的所有子进程
options的值可为
WEXITED 等待已终止的子进程,而无论其是否正常返回
WSTOPPED 等待已通过信号而停止的子进程
WCONTINUED 等待经由信号SIGCONT而回复的子进程
WNOHANG    如果匹配id值的子进程并无状态信息需要返回,则立即返回
WNOWAIT     执行成功,waitid()返回0,且会更新infop所指向的siginfo_t结构,以包含子进程的相关信息

//参数rusage所指向的结构中返回终止子进程的资源使用情况,包括cpu时间总量,内存管理统计数据
//如果options中指定了WUNTRACED 选项,则还可以获取到停止子进程的资源使用信息,一般也不怎么用这两个调用
#include<sys/resource.h>
#include<sys/wait.h>
pid_t wait3(int *status,int options,struct rusage *rusage);
pid_t wait4(pid_t pid,int *status,int options,struct rusage *rusage);

```
#include<unistd.h>
//丢弃旧程序,执行新程序,pathname新程序路径名
//argv命令行参数,argv[0]为命令名,argv[1]为第一个参数
//新程序的环境列表,对应新程序的environ数组
int execve(const char *pathname,char *const argv[],char *const envp[]);
int execlp("ls","ls","-l",argv[0],(char *)NULL);//在程序中使用,列出该程序的文件的详细信息,环境列表使用系统环境
int execl("/bin/sh","sh","-c","ls|wc",(char *)NULL);    //路径,命令名称,选项,命令内容

#include<stdlib.h>
int system(const char *command);    //执行任意的shell命令,该函数会给系统带来安全隐患

“`

转载于:https://www.cnblogs.com/biaopei/p/7730609.html

相关文章:

  • 对 COM 组件的调用返回了错误 HRESULT E_FAIL。
  • 清除浮动带来的父容器高度塌陷带来的影响
  • 第十章
  • 为什么IO多路复用需要采用非阻塞式IO
  • python内存泄露的诊断(转)
  • expdp和impdp数据泵
  • Mybatis调用存储过程
  • Electron入门介绍
  • win7 下硬盘安装Redhat7
  • EJBCA认证系统结构及相关介绍
  • Hadoop集群(四) Hadoop升级
  • 爬虫模拟登陆 SegmentFault
  • 《OOD启思录》:61条面向对象设计的经验原则
  • 学习C语言指针和链表的体会
  • [bzoj1912]异象石(set)
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • Angular数据绑定机制
  • ES6系统学习----从Apollo Client看解构赋值
  • JS笔记四:作用域、变量(函数)提升
  • nfs客户端进程变D,延伸linux的lock
  • scala基础语法(二)
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 如何在GitHub上创建个人博客
  • 使用 Xcode 的 Target 区分开发和生产环境
  • Nginx实现动静分离
  • 阿里云移动端播放器高级功能介绍
  • #微信小程序(布局、渲染层基础知识)
  • (1) caustics\
  • (pojstep1.3.1)1017(构造法模拟)
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (二)Linux——Linux常用指令
  • (二)linux使用docker容器运行mysql
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (汇总)os模块以及shutil模块对文件的操作
  • (十一)图像的罗伯特梯度锐化
  • (未解决)macOS matplotlib 中文是方框
  • (转) Face-Resources
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .NET 设计一套高性能的弱事件机制
  • .NET 中使用 Mutex 进行跨越进程边界的同步
  • .NET开发人员必知的八个网站
  • .NET中GET与SET的用法
  • @Conditional注解详解
  • [2016.7.Test1] T1 三进制异或
  • [BJDCTF2020]The mystery of ip1
  • [HNOI2015]实验比较
  • [IE9] IE9 RC版下载链接
  • [IE技巧] IE8中HTTP连接数目的变化
  • [Java]快速入门二叉树,手撕相关面试题
  • [JAVA设计模式]第二部分:创建模式
  • [Json.net]快速入门
  • [js高手之路] dom常用API【appendChild,insertBefore,removeChild,replaceChild,cloneNode】详解与应用...
  • [LeetCode系列]3元素最近和问题的O(n^2)解法
  • [MRCTF2020]Ez_bypass1
  • [MySQL--进阶篇]存储引擎的体系结构、简介、特点、选择