博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
进程的创建
阅读量:6509 次
发布时间:2019-06-24

本文共 2213 字,大约阅读时间需要 7 分钟。

#include
pid_t fork(void);

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

#include
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
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则等待进程id为id的子进程如果为P_PGID,则等待进程组id为id各进程的所有子进程options的值可为WEXITED 等待已终止的子进程,而无论其是否正常返回WSTOPPED 等待已通过信号而停止的子进程WCONTINUED 等待经由信号SIGCONT而回复的子进程WNOHANG    如果匹配id值的子进程并无状态信息需要返回,则立即返回WNOWAIT     执行成功,waitid()返回0,且会更新infop所指向的siginfo_t结构,以包含子进程的相关信息//参数rusage所指向的结构中返回终止子进程的资源使用情况,包括cpu时间总量,内存管理统计数据//如果options中指定了WUNTRACED 选项,则还可以获取到停止子进程的资源使用信息,一般也不怎么用这两个调用#include
#include
pid_t wait3(int *status,int options,struct rusage *rusage);pid_t wait4(pid_t pid,int *status,int options,struct rusage *rusage);

```#include
//丢弃旧程序,执行新程序,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
int system(const char *command); //执行任意的shell命令,该函数会给系统带来安全隐患

“`

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

你可能感兴趣的文章
【Mac】Mac键盘实现Home, End, Page UP, Page DOWN
查看>>
实战使用Axure设计App,使用WebStorm开发(1) – 用Axure描述需求
查看>>
安德鲁斯----多媒体编程
查看>>
[zz]在linux中出现there are stopped jobs 的解决方法
查看>>
Delphi下实现全屏快速找图找色 一、数据提取
查看>>
查询表字段信息
查看>>
关于机器学习的最佳科普文章:《从机器学习谈起》
查看>>
dxFlowChart运行时调出编辑器
查看>>
NET Framework 3.0 (WinFX) RTM发布
查看>>
图片拼接器
查看>>
C++ TinyXml操作(含源码下载)
查看>>
中断小笔记
查看>>
C#委托、事件、消息(入门级)
查看>>
FreeBinary 格式说明
查看>>
使用Spring Cloud和Docker构建微服务
查看>>
NB-IoT的成功商用不是一蹴而就
查看>>
九州云实战人员为您揭秘成功部署OpenStack几大要点
查看>>
1.电子商务支付方式有哪些 2.比较不同支付方式的优势劣势
查看>>
医疗卫生系统被爆漏洞,7亿公民信息泄露……
查看>>
神秘函件引发的4G+与全网通的较量
查看>>