fork()问题

shihyuyao 2005-11-11 09:05:55
#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 );
...全文
100 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
yeehya 2005-11-11
  • 打赏
  • 举报
回复
首先这是在类unix平台下的.
fork是该平台下产生一个子进程的系统调用.
子进程将获得父进程在调用fork之前的一个拷贝体!
根据这个函数的返回值来判定相应的进程的动作.
fork的返回值如代码中所列:
< 0 确切的就是 == -1,fork 函数执行错误,可能没有足够的内存做拷贝...
= 0 就说明接下来的一段是子进程的代码.一般是调用exe族函数,执行已有的外部程序.
这里是执行/bin/ls,也可以是任意的其他可执行文件.
> 0 这个制通知父进程其创建的子进程的id号.接下来的代码就是父进程执行的,为了避免出现僵死进程,一般使用wait(),将父进程阻塞,等待子进程的结束.最终退出.
hbvanguard 2005-11-11
  • 打赏
  • 举报
回复
fork()产生一个新进程,并返此进程的id号,
execlp( "/bin/ls", "ls", NULL ); 此函数为系统调用,执行ls命令

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧