系统调用wait、waitpid和exec函数】的更多相关文章

本文介绍了Linux下的进程的一些概念,并着重讲解了与Linux进程管理相关的重要系统调用wait,waitpid和exec函数族,辅助一些例程说明了它们的特点和使用方法. 1.7 背景 在前面的文章中,我们已经了解了父进程和子进程的概念,并已经掌握了系统调用exit的用法,但可能很少有人意识到,在一个进程调用了exit之后,该进程并非马上就消失掉,而是留下一个称为僵尸进程(Zombie)的数据结构.在Linux进程的5种状态中,僵尸进程是非常特殊的一种,它已经放弃了几乎所有内存空间,没有任何可…
本篇主要介绍一下几个内容: 竞态条件(race condition) exec系函数 解释器文件    1 竞态条件(Race Condition) 竞态条件:当多个进程共同操作一个数据,并且结果依赖于各个进程的操作顺序时,就会发生竞态条件. 例如fork函数执行后,如果结果依赖于父子进程的执行顺序,则会发生竞态条件. 说到fork之后的父子进程的执行顺序,我们可以通过下面的方式指定执行顺序: 如果父进程等待子进程结束,则需要调用wait函数. 如果子进程等待父进程结束,则需要像下面这样轮询:…
用fork函数创建子进程后,子进程往往要调用一种exec函数以执行另一个程序.当进程调用一种exec函数时,该进程执行的程序完全替换为新程序,而新程序则从其main函数开始执行.因为调用exec并不创建新进程,所以前后的进程ID并未改变.exec只是用一个全新的程序替换了当前进程的正文.数据.堆和栈段. 有6种不同的exec函数可供使用,它们常常被统称为exec函数.这些exec函数使得UNIX进程控制原语更加完善.用fork可以创建新进程,用exec可以执行新程序.exit函数和两个wait函…
exec函数族 1)exec函数族说明 fork()函数用于创建一个子进程,该子进程几乎复制了父进程的全部内容,但是,这个新创建的进程如何执行呢?exec函数族就提供了一个在进程中启动另一个程序执行的方法.它可以根据指定的文件名或目录名找到可执行文件,并用它来取代原调用进程的数据段.代码段和堆栈段,在执行完之后,原调用进程的内容除了进程号外,其他全部被新的进程替换了.另外,这里的可执行文件既可以是二进制文件,也可以是Linux下任何可执行的脚本文件. 在Linux中使用exec函数族主要有两种情…
/* ============================================================================ Name : test.c Author : blank Version : Copyright : Your copyright notice Description : 程序清单 8-8 exec函数实例,a.out是程序8-9产生的可执行程序==============================================…
1.exec家族一共有六个函数,分别是: (1)int execl(const char *path, const char *arg, ......); (2)int execle(const char *path, const char *arg, ...... , char * const envp[]); (3)int execv(const char *path, char *const argv[]); (4)int execve(const char *filename, char…
#include<unistd.h> pid_t fork(void); 返回:在子进程中为0,在父进程中为子进程IO,若出错则为- fork最困难之处在于调用它一次,它却返回两次.它在调用进程(称为父进程)中返回一次,返回值是新派生进程(称为子进程)的进程ID号:在子进程中又返回一次,返回值为0.因此,返回值本身告知当前进程是子进程还是父进程. fork在子进程返回0而不是父进程的进程ID的原因在于:任何子进程只有一个父进程,而子进程总是可以通过getppid取得父进程的进程ID.相反,父进…
exec函数: 子进程调用exec函数执行另一个程序,exec函数进程完全由新程序代替,替换原有程序正文,数据,堆,栈段 #include <unistd.h> extern char **environ; int execl(const char *path,const char *arg, ...); int execlp(const char *file, const char *arg, ...); int execle(const char *path,const char *arg…
fork()函数通过系统调用创建一个与原来进程(父进程)几乎完全相同的进程(子进程是父进程的副本,它将获得父进程数据空间.堆.栈等资源的副本.注意,子进程持有的是上述存储空间的"副本",这意味着父子进程间不共享这些存储空间.linux将复制父进程的地址空间内容给子进程,因此,子进程有了独立的地址空间.),也就是这两个进程做完全相同的事. 在fork后的子进程中使用exec函数族,可以装入和运行其它程序(子进程替换原有进程,和父进程做不同的事). fork创建一个新的进程就产生了一个新的…
25.1 介绍 在用 fork 函数创建子进程后,子进程往往要调用一种 exec 函数以执行另一个程序 当进程调用一种 exec 函数时,该进程完全由新程序代换,替换原有进程的正文,而新程序则从其 main 函数开始执行.因为调用 exec 并不创建新进程,所以前后的进程 ID 并未改变.exec 只是用另一个新程序替换了当前进程的正文.数据.堆和栈段. exec 函数族也称为代码替换函数族 25.1.1 函数说明 #include <unistd.h> int execl(const cha…
转自:http://www.cppblog.com/prayer/archive/2009/04/15/80077.html 也许有不少读者从本系列文章一推出就开始读,一直到这里还有一个很大的疑惑:既然所有新进程都是由fork产生的,而且由fork产生的子进程和父进程几乎完全一样,那岂不是意味着系统中所有的进程都应该一模一样了吗?而且,就我们的常识来说,当我们执行一个程序的时候,新产生的进程的内容应就是程序的内容才对.是我们理解错了吗?显然不是,要解决这些疑惑,就必须提到我们下面要介绍的exec…
在UNIX系统中,系统为进程相关提供了一系列的控制原语,包括:进程fork,进程exit,进程exec,进程wait等服务. 该篇文章主要与进程exec服务有关,并记录了几个需要注意留意的点. 照例给出其头文件及函数原型如下: #include <unistd.h> ); int execv(const char *pathname, char *const argv[]); , char *const envp[]); int execve(const char *pathname, cha…
linux c语言 fork() 和 exec 函数的简介和用法   假如我们在编写1个c程序时想调用1个shell脚本或者执行1段 bash shell命令, 应该如何实现呢? 其实在<stdlib.h> 这个头文件中包含了1个调用shell命令或者脚本的函数 system();直接把 shell命令作为参数传入 system函数就可以了, 的确很方便. 关于system 有一段这样的介绍:   system 执行时内部会自动启用fork() 新建1个进程,  效率没有直接使用fork()…
总结: 正则规则的声明,两种方法: exec是RegExp类的匹配方法 match是字符串类的匹配方法 var reg = /aaa/g; var reg = new RegExp("aaa","g"); 创建的时候 可以用 这两种方法创建,唯一的区别在于 第二种 用NEW的方法可以在规则内使用变量,例如 var name="xaiohua"; var reg=new RegExp("aa"+xiaohua+"aa&…
前几天在做毕业设计项目的时候,使用的PyQt4,想实现这么样一个功能: 场景描述:主窗口a(QMainWindow类型)和主窗口b(QMainWindow),b是通过a窗口中某一个按钮弹出来的. 功能:b窗口弹出来之后a窗口不能进行任何操作 实现方法: 用过Qt的同学应该很清楚,如果是QDialog类型的话,这个功能是很容易实现的,只需要通过QDialog的exec函数就可以阻塞原窗口,但是QMainWindow是没有这样的函数的,但是我们可以怎样实现呢? 方法1:重现QMainWindow的实…
一篇参考博客:http://www.cnblogs.com/fangwenyu/archive/2011/10/12/2209051.html 在Python中有一个exec()函数,同样在JavaScript中有一个eval()函数,这两个函数有一个相似的特点,那就是可以在里面传入一段Python代码或者JavaScript代码,发现竟然可以运行该代码. 但是遗憾的是,Java中并不存在这样的函数,于是突发奇想,我们可不可以在Java中实现一个类似的函数,用来执行Java代码呢? 我们知道,P…
先来看看exec函数: exec函数族     fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec函数以执行另一个程序.当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动例程开始执行.调用exec并不创建新进程,所以调用exec前后该进程的id并未改变. 将当前进程的.text..data替换为所要加载的程序的.text..data,然后让进程从新的.text第一条指令开始执行,但进程ID不变,换核不换…
概念 当进程调用一种exec函数时,该进程执行的程序完全替换为新程序,新程序从main函数开始执行.调用exec并不创建新进程,所以前后的进程ID并未改变.exec只是用磁盘上的一个新程序替换了当前进程的正文段.数据段.堆和栈…
eval函数 一.函数的作用 将字符串str当成有效的表达式来求值并返回计算结果.它要执行的python代码只能是单个运算表达式(不支持任意形式的赋值操作),而不能是复杂的代码逻辑. 二.函数的定义 eval(expression, globals=None, locals=None) 参数说明: expression:必选参数,可以是字符串,也可以是一个任意的code对象实例(可以通过compile函数创建).如果它是一个字符串,它会被当作一个python表达式进行分析和解释. globals…
Python3 exec 函数  Python3 内置函数 描述 exec 执行储存在字符串或文件中的 Python 语句,相比于 eval,exec可以执行更复杂的 Python 代码. 语法 以下是 exec 的语法: exec(object[, globals[, locals]]) 参数 object:必选参数,表示需要被指定的Python代码.它必须是字符串或code对象.如果object是一个字符串,该字符串会先被解析为一组Python语句,然后在执行(除非发生语法错误).如果obj…
exec()函数用来执行一个外部程序,我们再用这函数基本是在linux. 开启exec()函数: exec()函数是被禁用的,要使用这个函数必须先开启.首先是 要关掉 安全模式 safe_mode = off.然后在看看 禁用函数列表disable_functions = proc_open, popen, exec, system, shell_exec, passthru这里要把 exec 去掉,重启 apache 就OK了. exec()函数基本用法: exec ( string $com…
WScript.Shell对象的 run()和exec()函数使用详解 http://blog.sina.com.cn/s/blog_6e14a2050102v47g.html   vbScript 中 WScript.Shell 对象的 run 和 exec 函数功能使用详解 函数声明: Set Ws = CreateObject("Wscript.Shell")    Function Exec(ByVal Command As String) As WshExec    Func…
(1)eval(str [,globals [,locals ])函数将字符串str当成有效Python表达式来求值,并返回计算结果.(2)exec()函数将字符串str当成有效的Python表达式来执行,不返回计算结果:比如:content = eval('%s', content)print content #打印格式化后的contentexec('a = 1')pritn a #1…
使用QT也有一段时间了,有的时候需要跟踪代码到QT的源码中去查找问题.在这里我将记录一下我跟踪QT源码学习到的一些知识. 我的开发环境是VC6.0+QT4.3.3.QT已经不为VC6.0提供addin了,所以有的时候我也会使用EclipseCDT来编写代码,因为有了QT for Eclipse的plugin写代码会方便一些. 我们在学习QT的时候,接触的第一个程序就是下面的helloworld程序: [cpp] view plaincopyprint? #include #include int…
exec()函数 exec函数用于执行存储在字符串中的python语句 >>> exec("x=1") >>> x 但有时候,直接这样执行可能会污染我们的命名空间,比如下面的例子,我们使用python内置的abs函数求绝对值. >>> abs(-) >>> exec("abs='xyz'") >>> abs(-) File , in <module> TypeErr…
源代码: 在网上也搜索了答案 比较详细的答案是: <?php exec("lsof -i:80",$out,$status); 结果: var_dump($out); array(0) { } echo $status;值为127 2.通过:shell_exec("id -a");查看一下用户以及用户组 <?php echo shell_exec("id -a"); 结果:uid=1002(www) gid=1002(www) gro…
在Python动态执行的函数中,exec是用于执行一个字符串内包含的Python源码或其编译后对应的字节码. 一.    语法 1.    exec(Code, globals=None, locals=None) 2.    参数说明 本函数的参数与eval的参数及含义完全相同,不过第一个参数eval函数要求是表达式字符串或其编译的字节码,exec要求是Python语句或语句块或其编译的代码,如果是编译的代码,要求是'exec'模式编译,如果表达式,则也不会报错,但达不到eval返回计算值的效…
''' 函数的作用: 动态执行python代码.也就是说exec可以执行复杂的python代码,而不像eval函数那样只能计算一个表达式的值. exec(source, globals=None, locals=None, /) source:必选参数,表示需要被指定的python代码.它必须是字符串或code对象.如果source是一个字符串,该字符串会先被解析为一组python语句,然后执行.如果source是一个code对象,那么它只是被简单的执行. 返回值: exec函数的返回值永远为N…
代码如下: #include <sys/types.h> #include <sys/wait.h> #include <unistd.h> #include <stdio.h> #include <errno.h> #include <stdlib.h> inline int mySystem(const char *cmd) { pid_t pid; ; int status; ) status = -; == pid) { ex…
---恢复内容开始--- fork函数 该函数是unix中派生新进程的唯一方法. #include <unistd.h> pid_t   fork(void); 返回: (调用它一次, 它返回 两次 , 它在调用进程(称为父进程)中返回一次, 返回值是新派生进程(称为子进程)的进程ID号 在子进程又返回一次,返回值为0. 因此,返回值本身告知当前进程是子进程还是父进程) 在子进程中为0, 在父进程中为子进程ID, 若出错则为-1: fork有两个典型的用法: 1.一个进程创建一个自身的副本,这…