- 浏览: 1525699 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (525)
- SEO (16)
- JAVA-EE-Hibernate (6)
- JAVA-EE-Struts (29)
- JAVA-EE-Spring (15)
- Linux (37)
- JAVA-SE (29)
- NetWork (1)
- CMS (14)
- Semantic Research (3)
- RIA-Flex (0)
- Ajax-Extjs (4)
- Ajax-Jquery (1)
- www.godaddy.com (0)
- SSH (34)
- JavaScript (6)
- SoftwareEngineer (9)
- CMMI (0)
- IDE-Myeclipse (3)
- PHP (1)
- Algorithm (3)
- C/C++ (18)
- Concept&Items (2)
- Useful WebSite (1)
- ApacheServer (2)
- CodeReading (1)
- Socket (2)
- UML (10)
- PowerDesigner (1)
- Repository (19)
- MySQL (3)
- SqlServer (0)
- Society (1)
- Tomcat (7)
- WebService (5)
- JBoss (1)
- FCKeditor (1)
- PS/DW/CD/FW (0)
- DesignPattern (11)
- WebSite_Security (1)
- WordPress (5)
- WebConstruction (3)
- XML|XSD (7)
- Android (0)
- Project-In-Action (9)
- DatabaseDesign (3)
- taglib (7)
- DIV+CSS (10)
- Silverlight (52)
- JSON (7)
- VC++ (8)
- C# (8)
- LINQ (1)
- WCF&SOA (5)
- .NET (20)
- SOA (1)
- Mashup (2)
- RegEx (6)
- Psychology (5)
- Stock (1)
- Google (2)
- Interview (4)
- HTML5 (1)
- Marketing (4)
- Vaadin (2)
- Agile (2)
- Apache-common (6)
- ANTLR (0)
- REST (1)
- HtmlAnalysis (18)
- csv-export (3)
- Nucth (3)
- Xpath (1)
- Velocity (6)
- ASP.NET (9)
- Product (2)
- CSS (1)
最新评论
-
lt26w:
理解成门面模式应该比较容易明白吧
FacadePattern-Java代码实例讲解 -
lt26w:
看下面的例子比较明白.
FacadePattern-Java代码实例讲解 -
javaloverkehui:
这也叫文档,别逗我行吗,也就自己看看。
HtmlCleaner API -
SE_XiaoFeng:
至少也应该写个注释吧。
HtmlCleaner API -
jfzshandong:
...
org.springframework.web.filter.CharacterEncodingFilter 配置
许多朋友对fork和exec调用概念比较模糊,下面我简单描述下这方面的知识。
学过C语言的都知道,Unix下某个进程的内存分成三部分:代码段,堆栈段,数据段。代码段用来存放程序运行的代码,堆栈段用来存放子程序的局部变量,数据段用来存放全局变量。这在perl里也是一样的。
perl的fork调用,跟C的一样,当发生fork调用时,实际上发生如下事:
父进程将代码段,堆栈段,数据段完全复制一份给子进程。也就是说,在子进程运行之初,它拥有父进程的一切变量和句柄。例如,父进程申明了某个hash表,那这个hash表也会被子进程拥有。
然
而,一旦子进程开始运行,它的数据段和堆栈段就在内存里完全和父进程分离开了。也就是说,两个进程间不再共享任何数据。例如前面所说的hash表,虽然子
进程从父进程处继承了这个数据结构,但子进程写往hash里的数据,不会被父进程访问到。在shell里用ps命令,可以看到2个独立运行的进程。通常你
kill掉1个,不会影响另1个的运行。
那么父进程和fork出来的子进程如何通信呢?父进程和子进程间的通信有多种方法,最常见的是信号,另外还有管道,Socket,消息队列等,不在这里详叙。而2个进程间共享数据的办法,可以用线程或共享内存,我对这方面不熟悉。
如
果大概明白了fork,那么exec就容易理解了。一个进程一旦调用exec类函数,它本身就“死亡”了,系统把代码段替换成新的程序的代码,废弃原有的
数据段和堆栈段,并为新程序分配新的数据段与堆栈段,唯一留下的,就是进程号,也就是说,对系统而言,还是同一个进程,不过已经是另一个程序了。
在perl里,调用exec后,原进程就完全消失,由于消失了,它也就不会从新进程接受到任何返回值,除非新进程意外终止,原进程会接受到错误值。
fork 函数 |
exec 函数 |
|
文件描述符表 文件表 索引节点表 |
子进程复制文件描述符表 共享文件表、索引节点表 |
查看每个文件描述符表中的 close_on_exec 标志,若设置了该标志则关闭对应描述符,否则复制 |
实际用户、实际组 |
从父进程继承 |
保持不变 |
有效用户、有效组 |
从父进程继承 |
若执行文件的 set-uid 位设置,则设置成程序文件的用户 ID, 否则保持不变 |
保存的设置 - 用户 -ID 、设置 - 组 -ID |
从父进程继承 |
从上面已经分配的有效用户复制过来,也就是说若执行文件的 set-uid 为设置,则设置成程序文件的用户 ID ,否则复制有效用户。 |
添加组 |
从父进程继承 |
保持不变 |
对话期 ID 、进程组 ID 、控制终端 |
从父进程继承 |
保持不变 |
fsuid 、 fsgid 文件有效用户 ID 、组 ID (针对 linux 系统) |
从已经被赋值的有效用户、有效组复制过来 |
从已经被赋值的有效用户、有效组复制过来 |
环境变量 |
从父进程继承,也可以在 main(argc,argv[][],env[][]) 指定环境变量 |
保持不变,也可以在 execve(path[],argv[][],env[][]) 指定环境变量 |
根目录、当前工作目录、文件创建屏蔽字 |
从父进程继承 |
保持不变 |
资源限制 |
从父进程继承 |
保持不变 |
系统执行时间 用户执行时间 |
清空 |
保持不变 |
阻塞信号集合 |
从父进程继承 |
保持不变 |
挂起信号集合 |
被清除 |
保持不变 |
信号处理方式 |
从父进程继承 |
对于设置了信号捕捉函数的信号的处理方式改为默认处理方式,其他信号的处理方式保持不变 |
使用资源( ??? 还有疑问) |
清空 |
保持不变 |
父进程设置的锁(例如文件锁、互斥锁等) |
不继承 |
保持不变 |
发表评论
-
Linux内核源码包的安装及编译zz
2009-12-15 20:58 4308http://my.donews.com/ecco2005/2 ... -
Linux内核Makefile文件(二)
2009-12-15 19:34 2453=== 6 体系Makefile文 ... -
Linux内核Makefile文件(一)
2009-12-15 19:34 1871本文是/Documentation/kbuild/make ... -
Linux加载模块命令
2009-12-15 19:28 2711安装模块insmod *.ko卸载 ... -
linux内核模块编程
2009-12-15 19:25 3605主题: linux内核模块的程序结构--模块加载函数(必须), ... -
编译linux内核~
2009-12-05 22:04 1422小菜鸟第一次编译linux内核。截图太多 。。不方便上传 = ... -
grub2 基础教程
2009-12-05 18:01 2792grub2基础教程-修订版 ... -
Ubuntu9.10版本没有了menu.lst文件!
2009-12-05 18:00 3152囧~现在都在grub下面配置了。 不过麦斯之前的men ... -
关于信号量与线程互斥锁的区别与实现
2009-11-30 14:37 2428之前一直没有怎么 ... -
Linux信号量线程控制
2009-11-30 14:31 3691线程中互斥锁的使用,达到对共享资源互斥使用。除了使用互斥锁, ... -
信号量和自旋锁
2009-11-29 21:56 1668内核同步措施 ... -
Linux信号量semaphore编程实例
2009-11-29 21:20 6593本例示范Linux信号量的基本用法。该范例使用了两个线程分别对 ... -
Linux获取当前时间
2009-11-29 21:16 3689Linux获取当前时间 ... -
pthread库学习(2): 线程的同步,使用信号量
2009-11-29 20:55 2502先看下面这段程序,主线程创建了三个线程,每个线程中均有一个打印 ... -
信号量的基本思想
2009-11-29 20:17 1492信号量是1965荷兰Dijkstra 为了解决并发进程问题 ... -
多进程通信方式一:管道(PIPE)
2009-11-27 18:29 9119进程通信(IPC)的几种方式及比较 撰文:黄显国08 ... -
进程的管道通信
2009-11-27 18:12 3017实验四 进程的管道通信 ... -
Linux下线程的挂起和恢复
2009-11-27 15:42 3753POSIX的Linux操作系统没有提供线程挂起和恢复的例程,在 ... -
Linux 编程之生成静态连接库
2009-11-27 15:41 1412静态库及动态库的建立 ... -
LInux高级编程 - 线程(Threads)
2009-11-27 15:40 1915LInux高级编程 - 线程(Threads) ...
相关推荐
本文将深入探讨两个重要的函数,`fork()`和`exec()`系列函数,它们在启动新进程时起着至关重要的作用。 **一、复制进程映像:fork()函数** `fork()`函数是Unix和类Unix系统(如Linux)中用于创建新进程的关键系统...
- 在 Linux 环境下,`fork()` 和 `exec()` 等函数为多进程编程提供了强大的支持。通过合理地使用这些工具,开发人员可以构建出高效且可扩展的多进程应用程序。 - 理解进程的结构和控制方式对于高效地利用系统资源至...
掌握`fork()`和`exec`系列函数是理解和编写多进程Python程序的关键。在处理需要同时进行的异步任务,如后台服务、数据处理等场景时,这些工具非常有用。理解它们的工作原理和使用方法,能帮助开发者有效地利用系统...
Python中的进程分支主要涉及到两个核心概念:fork()和exec()。本文将详细讲解这两个概念在Python中的使用和它们之间的关系。 在Unix/Linux系统中,fork()方法用于创建一个与当前进程几乎完全相同的子进程。这个子...
在UNIX和Linux操作系统中,进程创建和控制是通过一系列系统调用来实现的,其中最常见的是`fork`、`exec`系列以及`system`和`popen`函数。这些调用各自有不同的特性和用途,理解它们的区别对于进行系统级编程至关重要...
Unix课程作业。 使用fork(), exec(), dup2(), pipe() ,open()系统调用完成与下列shell命令等价的功能。 grep –v usr < /etc/passwd | wc –l > result.txt
使用fork(),exec(),dup2(), pipe(),open()系统调用完成与下列shell命令等价的功能:grep -v usr | wc -l > result.txt
* fork 和 exec 系统调用联合使用能为程序开发提供有力支持。 * 用 fork 建立子进程,然后在子进程中使用 exec,这样就实现了父进程与一个与它完全不同子进程的并发执行。 六、wait 和 exec 的联合使用 * wait 和 ...
在实现外部命令时,我们需要使用fork和exec函数来创建一个新的进程来执行外部命令。同时,我们还需要使用wait函数来等待外部命令的执行结果。 此外,该shell程序还支持一些特色features,如支持多个空格、引号、...
在操作系统领域,Linux环境下,`fork`、`exec`和`wait`是三个非常重要的系统调用,它们在进程管理中扮演着核心角色。本文将深入解析这些函数的工作原理及其在实际应用中的重要性。 首先,`fork()`函数是创建新进程...
`fork()`函数能够创建一个新的子进程,使得子进程与父进程共享代码段,但各自拥有独立的堆栈段和数据段。当`fork()`成功执行时,它在父进程中返回子进程的进程ID,在子进程中返回0。因此,父进程和子进程可以在不同...
创建新进程主要涉及fork和exec系列函数。fork创建子进程,子进程与父进程的主要区别在于pid、ppid和资源统计信息的初始化。Linux使用clone系统调用实现fork,其名称源于其使用写时拷贝(Copy-On-Write, COW)技术来...
知识点 4: fork 和 exec 系统调用 fork 系统调用用于创建一个新的进程,该进程是当前进程的副本。exec 系统调用用于将一个新的程序加载到当前进程中,替代当前进程的正文段。 知识点 5: 进程同步和通信 进程同步...
在实验中,我们可以通过分析 Linux 的 fork 和 exec 等代码来了解操作系统进程的创建和执行过程。我们可以使用 `task_struct` 结构体来描述进程的状态,例如: ```c struct task_struct { volatile long state; /*...
4. **进程管理**:掌握如何创建、控制和通信进程(如fork、exec、wait、pipe和socket等),是Unix/Linux编程的核心内容。 5. **系统调用**:如open、read、write、close用于文件操作,fork和exec用于进程创建,...
例如,你可能会看到如何使用fork和exec家族函数来实现进程间的通信,或者如何使用select或epoll来实现高效的网络服务器。 此外,源码中的注释和文档将帮助你理解作者的思路,学习如何编写清晰、可维护的代码。通过...
例如,在 Linux 操作系统中,进程可以通过 fork 和 exec 系统调用来创建和执行,而内存管理则可以通过分页和分段机制来实现。 最后,数据库管理系统是指管理和存储数据的系统软件,包括数据模型、数据库设计、...
在Linux系统中,我们通常使用fork和exec系列函数来完成类似的操作。fork会创建一个与父进程几乎完全相同的子进程,而exec则会替换子进程的内存映像,使其执行新的程序。 在“www.pudn.com.txt”文件中,可能包含的...
学生需要编写程序,模拟用户通过命令行创建和管理进程,使用底层操作系统的API如fork和exec来创建和执行新进程。在进程撤消时,利用wait()系统调用来处理子进程的结束。此外,学生还需要对比分析模拟子系统与实际...