Linux中fork()如何实现父子进程不同的返回值
网上关于fork()文章都说fork()来创建子进程,利用返回值的不同来执行不同的代吗段.但都没有说到如何实现不同的返回值.下面我将和你来说说这个问題:
考虑如下代码:
int i = fork();
if ( i )
{
......
}
else
{
........
}
.......
当父进程执行到这一句时:int i = fork(),就创建了一个新的进程,新的进程有自己的堆栈段和代码段,但是和父进程共享代码段.最需要主意的是,
子进程的上下文也和父进程相同,这就是说,此时,父进程的 PC指向int i = fork(),子进程的 PC也指向int i = fork().但是,谁都知道,当前PC指向的这个语句是涵数调用,即然是涵数调用,就有返回值,返回值放在哪里呢?就是放在进程的各自堆栈中.所以在父进程调用fork()时,fork()涵数在父进程的堆栈中写入子进程的进程ID,而又在刚刚创建的子进程的堆栈中写入0.fork()涵数调用结束后,因为有新的进程,所以系统要重新调度,就在这一刻,父子进程的PC指向fork()涵数返回处,如果父进程得到运行,则父进程从自己的堆栈中得到的返回值是子进程的ID,从而 i = ID;如果子进程得到运行,则子进程从自己的堆栈中得到的返回值是0,即 i = 0.
又考虑以下代码:
int i = fork();
.......
int j = fork();
相关文档:
毕业设计用到一些接口测试代码,其中就有串口的测试,这其中基本借鉴了华清远见那本书里面的代码,读串口程序交叉编译到开发板中,写串口程序在PC端执行。代码很简单,因为串口在linux下也只是个文件,只需要打开这文件进行读写操作就好了。其中使用了2个函数,分别是配置端口和打开端口的函数,这2个函 ......
现在用linux的朋友越来越多了,前几天就有两个朋友问我linux下怎么配置java环境,我想还有很多朋友想了解学习这方面的东西,就写一个完全一点的linux java环境配置吧,希望对大家有帮助。
一. 下载jdk5.0 for linux
到sun的主页 http://java.sun.com/j2se/1.5.0/download.jsp 下载jdk安装文件jdk-1_5_0_05-linux-i586 ......
Linux, named after the inventor, Linus Torvalds, is a so different OS for everyone against Windows. To everyone who used to use Windows, Linux need us to do more for everything which we usually do by computer, such as playing a video.
Someone says, Linux is for the ones who are good at the computer ......
1. 装系统
我装的双系统,Windows 7 和 Fedora 12.
1)我的C盘有50GB,所以我先分了区,分成3个,1个30GB,1个15GB,剩下的一个区3GB。
2)先装Windows 7在30GB的分区。
P:Sony的型号VGN-NR120E很变态,安装的时候必须要用最新补丁的安装盘才可以驱动到硬盘(导致不能装XP),可能是HDD ......
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <net/if.h>
#include <netinet/if_ether.h>
#include <string.h>
#include <netinet/ether.h>
#include<unistd.h>
int main(i ......