linux进程编程:子进程创建及执行函数简介
linux进程编程:子进程创建及执行函数简介
子进程创建及执行函数有三个:
(1)fork();
(2)exec();
(3)system();
下面分别做详细介绍。
(1)fork()
函数定义:
pid_t fork();
函数说明:
linux下进程在内存中由三部分数据组成:代码段、数据段、堆栈段。在一个进程中,调用fork函数,可以创建、启动一个新进程。新进程与父进程共享代码段,复制父进程的数据段和堆栈段。创建成功后,fork()会向两个进程都有返回值。向父进程的返回值为子进程的进行号,向子进程的返回值为0。由于两个进程共享代码段,我们就利用两个返回值的不同,通过if...else...区分两进程在子进程启动后的运行情况。
返回值:
创建成功后,fork()会向两个进程都有返回值。向父进程的返回值为子进程的进行号,向子进程的返回值为0。函数调用失败返回值为-1。错误原因存在于errno中。
(2)exec()函数族
exec函数族共6个函数,函数原型:
int execl(const char *path, const char *arg, ...);
int execlp(const char *file, const char *arg, ...);
int execle(const char *path, const char *arg, ..., char *const envp[]);
int execv(const char *path, char *const arg[]);
int execvp(const char *file, char *const arg[]);
int execve(const char *path, char *const arg[], char *const envp[]);
函数族说明:
exec()函数族通过指定路径或文件名的方式找到并执行一个可执行文件。该可执行文件可以使二进制文件或linux系统下可执行的shell脚本文件,一旦执行即替代原进程代码,废除原进程数据段和堆栈段,但仍然沿用原进程的进程号。换句话说,原进程运行的程序已经换成了新的程序,但对系统而言还是同一个进程。如果我们的程序向启动另一个程序的执行,还想原进程继续运行,可以将fork和exec结合使用,先创建新进程,然后再新进程中使用exec调用需要启动的程序。
函数返回值:
exec()函数族的函数执行成功后没有返回值,调用失败时才会返回-1,原程序由调用点继续往下执行。
(3)system()
函数定义:
int system(const char *file);
函数说明:
system()相当于fork与execl的组合。首先由fork()函数建立了一个子进程,然后由execl()函数根据参数file给定的文件名找到并执行可执行文件。
system()与exec函数族都可执行进程外的命令,区别是system()函数在原程序上创建一个新的进程,再在新进程中执行可执行文件;而exec函数族是在新开辟的进程中植入新代码替代原程序代码。
函数返回值:
函数调用成功返回0;调用失败返回-1。若返回值的8~15位为127,则system()中的execl函数执行失败。
最后补充一下,如果用fork复制进程,那么在复制进程后调用的程序/应用内部一定要记得exit(0);做退出处理,不然会出现僵尸进程。
而且你会发现哪怕你在被调用的程序/应用A里面有做exit处理,下次继续fork()得到的gid会依次递增,不会复用上一个pid,为什么呢?
别着急,这是缓存机制,进程一旦退出,进程号可以重用的,但是为了避免误认为是之前退出的进程,会有一定的延迟,不用担心进程ID被你消耗完。
所以,放心,会重复利用的。一直加,加到最大,在重小的开始,又来一轮。
也可以参考下这篇文章:Linux多线程概述
linux进程编程:子进程创建及执行函数简介的更多相关文章
- Linux进程实践(1) --Linux进程编程概述
进程 VS. 程序 什么是程序? 程序是完成特定任务的一系列指令集合. 什么是进程? [1]从用户的角度来看:进程是程序的一次执行过程 [2]从操作系统的核心来看:进程是操作系统分配的内存.CPU时间 ...
- linux进程编程入门
1.进程的创建与操作 任务描述: 在父进程中创建一个全局变量,一个局部变量,并赋予初始值,用fork函数创建子进程.在子进程中对父进程的变量进行自加操作,并且输出变量值,然后父进程睡眠一段时间 各进程 ...
- javascript模块化编程-详解立即执行函数表达式IIFE
一.IIFE解释 全拼Imdiately Invoked Function Expression,立即执行的函数表达式. 像如下的代码所示,就是一个匿名立即执行函数: (function(windo ...
- linux进程管理和系统状态查看命令简介
1 进程管理简介 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础 2 常用命令 2.1 pstree 2.1.1 功能描 ...
- linux进程管理和系统状态常用命令简介
1 进程管理简介 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础 2 常用命令 2.1 pstree 2.1.1 功能描 ...
- Linux网络编程:原始套接字简介
Linux网络编程:原始套接字编程 一.原始套接字用途 通常情况下程序员接所接触到的套接字(Socket)为两类: 流式套接字(SOCK_STREAM):一种面向连接的Socket,针对于面向连接的T ...
- Linux 进程编程
Linux通过维护者五个状态来调度进程的运行.这五个状态分别为:运行.可中断.不可中断.僵死.停止 . PID来标识不同的进程的,Linux中每一个进程都有一个唯一的进程号 . PCB块就是一个进程资 ...
- linux/unix 编程手册 fork()函数
父进程通过fork()函数创建子进程,将父进程数据段和栈的内容拷贝到子进程中,子进程执行程序execve创建新程序,调用exit函数退出到等待wait(),挂起父进程, 父子进程享用相同的程序文本段. ...
- Linux网络编程中tcp_server和tcp_client函数的封装
本文的主要目的是将server套接字和client套接字的获取,做一个简易的封装,使用C语言完成. tcp_server 服务器端fd的获取主要分为以下几步: 1.创建socket,这一步仅仅 ...
随机推荐
- Hausdorff distance
微分动力系统原理 这本书里有介绍 Hausdorff距离是描述两组点集之间相似程度的一种量度,它是两个点集之间距离的一种定义形式:假设有两组集合A={a1,…,ap},B={b1,…,bq},则这两个 ...
- Nginx执行php显示no input file specified的处理方法
/var/www/nginx-default中放上一份phpinfo.php,使用http://localhost/phpinfo.info 访问,结果报错,显示 “No input file spe ...
- 用"僵尸对象"调试内存管理问题
Cocoa提供了"僵尸对象"(Zombie Object)这个功能.启用这项调试功能之后,运行时系统会把所有已经回收的实例转化成特殊的"僵尸对象",而不会真正回 ...
- CentOS-6 yum安装nginx php53 mysql55 搭建LNMP环境
1.导入外部软件库 01.rpm -Uvh http://dl.iuscommunity.org/pub/ius/stable/Redhat/6/x86_64/epel-release-6-5.noa ...
- configure.ac:32: error: possibly undefined macro: AC_DEFINE
在ubuntu 下编译snappy时,在检查依赖关系时,处理autoconf的包时,在相关依赖包都已经安装的情况下,报如下错误,死活不过. configure.ac:32: error: possib ...
- 看门外汉如何实现:C#操作 MongoDB基本CURD的事务控制之 第二部分
第二部分 尝试解决BulkWrite(List<WriteModel<T>>)问题 在上次发表的文章中,得到了一些很好的反馈,真切体会到写博文的好处,有高人指出两大问题,具体可 ...
- Asp.net MVC进入请求管道的过程
Asp.net MVC进入请求管道的过程 Asp.Net MVC 跟AspNet 入口解释 Asp.Net MVC请求处理过程 mvc 请求模型 mvc的原理 mvc模型 NewMVCPipleLin ...
- [转]网络诊断工具:MTR
MTR是Linux平台上一款非常好用的网络诊断工具,集成了traceroute.ping.nslookup的功能,用于诊断网络状态非常有用.能按要求对路由中所有节点进行批量测试 第一列(Host):I ...
- Win10系统Start Menu上的图标莫名消失
今天在工作过程中,突然有测试的同事给我报来一个问题.她是这么描述的“执行完XXX工具之后,在Start Menu找不到图标了.” 针对问题本身: 1,是执行完XXXX工具之后? 2,Start Men ...
- URL、URI和URN三者之间的区别
URI 统一资源标识符 Uniform Resource Identifier URL 统一资源定位符 Uniform Resource Locator URN 统一资源 ...