QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 3976|回复: 4

fork()作用

[复制链接]
发表于 2005-11-15 07:51:43 | 显示全部楼层 |阅读模式
#include<sys/types.h>
#include<stdio.h>
#include<unistd.h>

int main()
{
   pid_t pid;
   pid=fork();

   if ( pid < 0 ) {
        fprintf( stderr, "Fork Failed" );
        exit( -1 );
   }
   else
   if ( pid == 0 ) {
        execlp( "/bin/ls", "ls", NULL );
   }
   else
   {
        wait( NULL );
        printf( "Child Complete" );
        exit( 0 );
   }
}


懂得朋友可以说明一下这代码运作过程吗??

下面这两个地方我都不懂可以详细说明一下这两个函数的运用及参数

fork();
execlp( "/bin/ls", "ls", NULL );
发表于 2005-11-22 19:57:34 | 显示全部楼层
书上是这样说的:进程调用fork()函数建立新的子进程,然后在子进程里调用exec函数运行新程序(/bin/ls",就是linux下的显示目录文件命令),父进程等待(wait()函数 )子进程执行完毕后正常退出.
附:楼主看的是什么书啊?不会和我是一本吧?!
回复

使用道具 举报

发表于 2005-12-18 00:45:44 | 显示全部楼层
本程序首先使用 fork系统调用创建一个子进程。
fork的功能可以这样理解:他将调用他的进程进行复制(除 PID和PPID),复制出来的另外一个进程被称为子进程。此系统调用在成功返回时,给创建的那个进程返回0,而给调用它的进程返回子进程的PID。因为fork出来的那个进程完全和父进程执行相同,因此在子进程中使用使用execlp系统调用来重写此进程的代码段和数据段(就是在这个进程的地址空间内执行另外一个程序)。而在父进程中,使用系统调用wait来等待它的某一个子进程在结束时的 SIGCHILD信号(人和一个进程在退出时都会向它的父进程发送信号SIGCHILD)。因外在这个实现中,父进程只启动了一个子进程,因此它等到就是唯一的自己的子进程。

关于这两个函数的用法,可参考 man fork、man execlp 或者更详细的使用 info fork、info execlp
回复

使用道具 举报

发表于 2005-12-20 22:59:46 | 显示全部楼层

。。。这应该放在编程版啊……怎么跑到内核版来了
回复

使用道具 举报

发表于 2005-12-26 13:42:13 | 显示全部楼层
就是,fork怎么在内核中实现的应该到这版,怎么用就去编程版
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-6-4 19:32 , Processed in 1.395771 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表