shihyu 发表于 2005-11-15 07:51:43

fork()作用

#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 );

devel_fan 发表于 2005-11-22 19:57:34

书上是这样说的:进程调用fork()函数建立新的子进程,然后在子进程里调用exec函数运行新程序(/bin/ls",就是linux下的显示目录文件命令),父进程等待(wait()函数 )子进程执行完毕后正常退出.
附:楼主看的是什么书啊?不会和我是一本吧?!

xhbdahai 发表于 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

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

AlbertYao 发表于 2005-12-26 13:42:13

就是,fork怎么在内核中实现的应该到这版,怎么用就去编程版
页: [1]
查看完整版本: fork()作用