- 浏览: 586688 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (365)
- Tomcat调优 (2)
- Apache Http (20)
- Webserver安装 (5)
- Linux安装 (28)
- Linux常用命令 (17)
- C语言及网络编程 (10)
- 文件系统 (0)
- Lucene (12)
- Hadoop (9)
- FastDFS (8)
- 报表 (0)
- 性能测试 (1)
- JAVA (18)
- CSharp (3)
- C++ (38)
- BI (0)
- 数据挖掘 (0)
- 数据采集 (0)
- 网址收集整理 (3)
- Resin (0)
- JBoss (0)
- nginx (0)
- 数据结构 (1)
- 随记 (5)
- Katta (1)
- Shell (6)
- webservice (0)
- JBPM (2)
- JQuery (6)
- Flex (41)
- SSH (0)
- javascript (7)
- php (13)
- 数据库 (6)
- 搜索引擎排序 (2)
- LVS (3)
- solr (2)
- windows (1)
- mysql (3)
- 营销软件 (1)
- tfs (1)
- memcache (5)
- 分布式搜索 (3)
- 关注的博客 (1)
- Android (2)
- clucene (11)
- 综合 (1)
- c c++ 多线程 (6)
- Linux (1)
- 注册码 (1)
- 文件类型转换 (3)
- Linux 与 asp.net (2)
- perl (5)
- coreseek (1)
- 阅读器 (2)
- SEO (1)
- 励志 (1)
- 在线性能测试工具 (1)
- yii (7)
- 服务器监控 (1)
- 广告 (1)
- 代理服务 (5)
- zookeeper (8)
- 广告联盟 (0)
- 常用软件下载 (1)
- 架设自已的站点心得 (0)
最新评论
-
terry07:
java 7 用这个就可以了 Desktop desktop ...
关于java Runtime.getRunTime.exec(String command)的使用 -
HSINKING:
怎么设置打开的dos 窗口是指定的路径下
关于java调用bat文件,不打开窗口 -
liubang201010:
hyperic hq更多参考资料,请访问:http://www ...
hyperic-hq -
^=^:
STDIN_FILENO是unistd.h中定义的一个numb ...
深入理解dup和dup2的用法 -
antor:
留个记号,学习了
[转]用java流方式判断文件类型
引用
在linux中,只有一个函数可以创建子进程:fork。
#include <sys/types.h>
#include <unistd.h>
pid_t fork(void);
由f o r k创建的新进程被称为子进程( child process)。该函数被调用一次,但返回两次。两次返回的区别是子进程的返回值是0,而父进程的返回值则是新子进程的进程I D。将子进程I D返回给父进程的理由是:因为一个进程的子进程可以多于一个,所以没有一个函数使一个进程可以获得其所有子进程的进程I D。f o r k使子进程得到返回值0的理由是:一个进程只会有一个父进程,所以子进程总是可以调用g e t p p i d以获得其父进程的进程I D (进程ID 0总是由交换进程使用,所以一个子进程的进程I D不可能为0 )。
子进程和父进程共享很多资源,除了打开文件之外,很多父进程的其他性质也由子进程继承:
• 实际用户I D、实际组I D、有效用户I D、有效组I D。
• 添加组I D。
• 进程组I D。
• 对话期I D。
• 控制终端。
• 设置-用户- I D标志和设置-组- I D标志。
• 当前工作目录。
• 根目录。
• 文件方式创建屏蔽字。
• 信号屏蔽和排列。
• 对任一打开文件描述符的在执行时关闭标志。
• 环境。
• 连接的共享存储段。
• 资源限制。
父、子进程之间的区别是:
• fork的返回值。
• 进程I D。
• 不同的父进程I D。
• 子进程的t m s _ u t i m e , t m s _ s t i m e , t m s _ c u t i m e以及t m s _ u s t i m e设置为0。
• 父进程设置的锁,子进程不继承。
• 子进程的未决告警被清除。
• 子进程的未决信号集设置为空集。
使f o r k失败的两个主要原因是:( a )系统中已经有了太多的进程(通常意味着某个方面出了问题),或者( b )该实际用户I D的进程总数超过了系统限制。回忆表2 - 7,其中C H I L D _ M A X规定了每个实际用户I D在任一时刻可具有的最大进程数。
f o r k有两种用法:
(1) 一个父进程希望复制自己,使父、子进程同时执行不同的代码段。这在网络服务进程中是常见的——父进程等待委托者的服务请求。当这种请求到达时,父进程调用f o r k,使子进程处理此请求。父进程则继续等待下一个服务请求。
(2) 一个进程要执行一个不同的程序。这对s h e l l是常见的情况。在这种情况下,子进程在从f o r k返回后立即调用e x e c。
我们从一个例子程序中可以看到fork函数的作用,子进程与父进程之间的资源共享。
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
int glob = 6;
char buf[] = "a write to stdout\n";
int main()
{
int var;
pid_t pid;
var = 88;
fprintf(stderr, "%s", buf);
printf("before fork\n");
if(( pid = fork() ) < 0 )
{
fprintf(stderr, "fork error\n");
}
else if(pid == 0)
{
glob++;
var++;
printf("child process\n");
printf("pid = %d, father pid = %d, glob = %d, var = %d\n", getpid(), getppid(), glob, var);
exit(0);
}
else
{
sleep(2);
printf("father process\n");
printf("pid = %d, father pid = %d, glob = %d, var = %d\n", getpid(), getppid(), glob, var);
}
return 0;
}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/kunp/archive/2005/04/17/351533.aspx
#include <sys/types.h>
#include <unistd.h>
pid_t fork(void);
由f o r k创建的新进程被称为子进程( child process)。该函数被调用一次,但返回两次。两次返回的区别是子进程的返回值是0,而父进程的返回值则是新子进程的进程I D。将子进程I D返回给父进程的理由是:因为一个进程的子进程可以多于一个,所以没有一个函数使一个进程可以获得其所有子进程的进程I D。f o r k使子进程得到返回值0的理由是:一个进程只会有一个父进程,所以子进程总是可以调用g e t p p i d以获得其父进程的进程I D (进程ID 0总是由交换进程使用,所以一个子进程的进程I D不可能为0 )。
子进程和父进程共享很多资源,除了打开文件之外,很多父进程的其他性质也由子进程继承:
• 实际用户I D、实际组I D、有效用户I D、有效组I D。
• 添加组I D。
• 进程组I D。
• 对话期I D。
• 控制终端。
• 设置-用户- I D标志和设置-组- I D标志。
• 当前工作目录。
• 根目录。
• 文件方式创建屏蔽字。
• 信号屏蔽和排列。
• 对任一打开文件描述符的在执行时关闭标志。
• 环境。
• 连接的共享存储段。
• 资源限制。
父、子进程之间的区别是:
• fork的返回值。
• 进程I D。
• 不同的父进程I D。
• 子进程的t m s _ u t i m e , t m s _ s t i m e , t m s _ c u t i m e以及t m s _ u s t i m e设置为0。
• 父进程设置的锁,子进程不继承。
• 子进程的未决告警被清除。
• 子进程的未决信号集设置为空集。
使f o r k失败的两个主要原因是:( a )系统中已经有了太多的进程(通常意味着某个方面出了问题),或者( b )该实际用户I D的进程总数超过了系统限制。回忆表2 - 7,其中C H I L D _ M A X规定了每个实际用户I D在任一时刻可具有的最大进程数。
f o r k有两种用法:
(1) 一个父进程希望复制自己,使父、子进程同时执行不同的代码段。这在网络服务进程中是常见的——父进程等待委托者的服务请求。当这种请求到达时,父进程调用f o r k,使子进程处理此请求。父进程则继续等待下一个服务请求。
(2) 一个进程要执行一个不同的程序。这对s h e l l是常见的情况。在这种情况下,子进程在从f o r k返回后立即调用e x e c。
我们从一个例子程序中可以看到fork函数的作用,子进程与父进程之间的资源共享。
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
int glob = 6;
char buf[] = "a write to stdout\n";
int main()
{
int var;
pid_t pid;
var = 88;
fprintf(stderr, "%s", buf);
printf("before fork\n");
if(( pid = fork() ) < 0 )
{
fprintf(stderr, "fork error\n");
}
else if(pid == 0)
{
glob++;
var++;
printf("child process\n");
printf("pid = %d, father pid = %d, glob = %d, var = %d\n", getpid(), getppid(), glob, var);
exit(0);
}
else
{
sleep(2);
printf("father process\n");
printf("pid = %d, father pid = %d, glob = %d, var = %d\n", getpid(), getppid(), glob, var);
}
return 0;
}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/kunp/archive/2005/04/17/351533.aspx
发表评论
-
[转载]strftime() 函数_时间格式
2011-01-12 11:21 1195[转载]strftime() 函数 (2007-12-06 1 ... -
如何调试守护进程
2011-01-11 13:05 3219如何调试守护进程 我写 ... -
UNIX管道编程——使用pipe函数,dup函数,dup2函数
2011-01-11 10:02 51832009-12-29 11:46管道在unix ... -
c中的管道及复制描述符
2011-01-10 17:22 12481、 #include <stdio.h& ... -
如何在运行时确定对象类型(RTTI)
2011-01-10 11:45 947引用作者:NorthTibet RTTI 是“R ... -
string, char*, int类型转换 , c++强制转化
2011-01-10 10:04 16517一、 以下是常用的几种类型互相之间的转换 string 转 ... -
linux信号机制之sigaction结构体浅析
2011-01-10 00:27 1408linux 2009-02-20 16:47:00 阅读460 ... -
Linux下的管道编程技术-dup函数和dup2函数
2011-01-09 23:45 1151from [url]http://www.xxlinux.co ... -
Linux下使用C/C++访问数据库
2011-01-07 16:19 1347Linux下使用C/C++访问数据库——MySQL篇 ... -
多核分布式队列的实现:“偷”与“自私”的运用
2011-01-06 11:38 1068原创作品,允许转载, ... -
Boost和STL学习资料大全
2011-01-06 09:38 2645from http://blog.csdn.net/k2eat ... -
linux平台上编译安装boost库
2011-01-06 09:33 6743from http://dev.firnow.com/co ... -
C++多线程入门
2010-12-30 09:52 1254第1节 背景 为了更好 ... -
c++中__declspec用法总结
2010-12-29 17:47 1793c++中__declspec用法总结C++ ... -
__cplusplus的用处
2010-12-29 14:07 1067作者: Aprilgogo 发表日期: 2007-03-1 ... -
#ifdef __cplusplus深度剖析
2010-12-29 14:06 833时常在cpp的代码之中看 ... -
C和C++之间库的互相调用
2010-12-29 13:44 1061C和C++之间库的互相调用 昨晚有个朋友问我关于在C中调用C ... -
c, c++ 库调用相关知识
2010-12-29 13:41 13851。 重载是如何实现的 ... -
放在函数后面的const是什么意思?
2010-12-17 16:13 1483经常看到这样的定义: void f() const ... -
临时记录
2010-12-15 15:37 8251\ c开发包典型的名字是 glibc-devel-somet ...
相关推荐
### Linux中的`fork()`函数详解 #### 一、`fork()`函数基础介绍 在Linux操作系统中,`fork()`函数是一个非常重要的系统调用,用于创建一个新的进程。这个新进程被称为子进程,而调用`fork()`函数的原进程则称为父...
创建新进程:fork 函数 fork 函数是 UNIX 统操作系统中用于创建新进程的系统调用。它创建了一个完全相同的子进程副本,并返回一个进程标识符(PID)。fork 函数的返回值在父进程和子进程中不同:在父进程中,返回子...
fork 函数详解 fork 函数是 Unix 系统中一个非常重要的系统调用,它允许一个进程创建一个新的进程,该新的进程是原来进程的副本。fork 函数的返回值在父进程和子进程中不同,在父进程中返回新创建的子进程的进程 ID...
### fork函数和子进程知识点详解 #### 一、引言 在计算机编程中,特别是针对多任务处理领域,进程管理是实现系统并发的关键技术之一。其中,`fork()`函数是Unix/Linux系统中创建新进程的核心手段。通过深入理解`...
### Linux 内核 do_fork 函数源代码浅析 #### 一、引言 在 Linux 内核中,进程的创建是一项基本且重要的功能。本文将深入剖析 do_fork 函数,它作为核心组件之一,在 Linux 内核中扮演着创建新进程的关键角色。do_...
在"演示fork函数的效果"这个主题中,我们将深入探讨`fork()`的工作原理以及如何使用它。 首先,`fork()`函数的调用会返回两次:一次在父进程中,一次在子进程中。在父进程中,`fork()`返回新创建子进程的进程ID...
### c语言中的`fork()`函数详解 #### 一、引言 `fork()`函数作为操作系统提供的核心系统调用之一,在进程管理和并发编程中扮演着重要角色。本文将深入探讨`fork()`函数的基本概念、工作原理及其在C语言中的具体应用...
《深入理解fork函数:进程创建的艺术》 fork函数在软件开发中扮演着至关重要的角色,尤其是在操作系统编程和并发处理中。它是Unix/Linux系统中创建新进程的主要方式。当我们谈论fork时,我们实际上是在讨论如何复制...
实验二fork函数kkkkkkkkkkkkk
关于fork函数的介绍,和测试程序,原版fork linux平台
2.fork 函数被调用一次,但返回两次, 两次返回的唯一区别是子进程的返回值是 0, 而父进程的返回值是新子进程的 PID。 3.子进程和父进程继续执行 fork 调用之后的指令。 在上图的存储空间布局中,父子进程只共享正文...
wait函数允许父进程挂起,直到一个子进程终止或者接收到信号,然后恢复并返回子进程的退出状态。 在实验中,通过fork系统调用,我们可以创建一个新的进程。在创建过程中,父进程会复制自身的内存空间,包括代码、...
`fork()`函数是Linux操作系统中用于创建新进程的关键系统调用。在本文档中,我们将深入探讨`fork()`的工作原理,以及如何通过示例代码理解其执行过程。 首先,让我们来了解一下`fork()`函数的基本概念。`fork()`会...
用fork创建子进程; 回答no执行父进程,yes执行父进程并复制进程的操作;在父进程将str3,str4接至str0中,并输出str0 ;在子进程中,将str1,str2接至str0中,并输出str0
在Linux操作系统中,`fork()`函数是一个非常关键的系统调用,它被用来创建一个新的进程——也就是我们常说的子进程。这个过程被称为进程复制,因为子进程会继承父进程的大部分属性,包括打开的文件、内存空间、信号...
在win系统下模拟linux中的fork()函数执行过程与基础通信过程 备注清晰。
fork函数的写时拷贝技术 fork函数是一种用于创建子进程的系统调用,它在创建子进程时,会将父进程的虚拟存储空间复制给子进程的虚拟存储空间。这种机制使得父子进程可以共享文件等资源,但是为了避免多个进程之间的...
原来刚刚开始做Linux下面的多进程编程的时候,对于下面这段代码感到很奇怪: #include #include #include #include #include #include #define LEN 2 void err_exit(char*fmt,…);...
本文档以ppt形式编写,通过例子,学习fork()函数的应用及用法,适合初学者。