[%d]n", pid); execl("/bin/ls", "/bin/ls", NULL); 执行正常的话, 应该是一个名为test的父进程,一个名为ls的子进程。 放到开....">

当前位置:  技术问答>linux和unix

fork()卡住了不走了,什么回事?

    来源: 互联网  发布时间:2016-08-29

    本文导语:  /*test.c*/ printf("fork beforen"); pid = fork(); printf("fork after, pid->[%d]n", pid); execl("/bin/ls", "/bin/ls", NULL); 执行正常的话, 应该是一个名为test的父进程,一个名为ls的子进程。 放到开发板上,居然出问题了,看到的是两...

/*test.c*/
printf("fork beforen");
pid = fork();
printf("fork after, pid->[%d]n", pid);
execl("/bin/ls", "/bin/ls", NULL);

执行正常的话, 应该是一个名为test的父进程,一个名为ls的子进程。

放到开发板上,居然出问题了,看到的是两个test进程
"fork after ,pid->[1259] "有这条父进程打印的信息
但是子进程没有打印“ork after ,pid->[0]”, 貌似fork()子进程的时候卡住了,但是明明又有进程copy出来,有没有人知道什么回事呢????

|
围观围观,职业围观。

|
叽。。。。。。。。。。。。。。。。。。。。。

|

printf("fork beforen");
pid = fork();
if (pid == 0) {
    execl("/bin/ls", "ls", (char *)0);
    exit(1);
}
printf("fork after, pid->[%d]n", pid);

|

再试试上面的代码,特别要注意:
1. fork之后,在子进程里,不要调用任何除_exit()和execl外的函数。
2. fork之后,在子进程里,不要调用修改任何变量。(pid = fork()除外)
3. fork之后,在子进程里,不要return。

原因是嵌入式系统上的fork, 大多数实际上是vfork,如果楼主知道vfork和fork的区别在,应该能明白上面提到的3个不能。
http://www.opengroup.org/onlinepubs/7990989775/xsh/vfork.html

|
fork就是分叉,把进程一分为二,两个一样的进程,所以你是把进程分成了两个一样的test,然后每个test再分叉(execl也会fork的)做个ls再返回自己的test;
要让fork的两个进程做不同的事,要通过"if(pid>0){父进程 }else if(pid==0){子进程 } else {错误处理}"来控制,fork出来的两个进程的返回值不一样,大于0是父进程,0是子进程,小于0是出错,两个进程都会执行fork后的所有语句,直到exit;但是由于两个进程的返回值pid不一样,他们执行同一个if语句判断的结果也不一样,就会去做不同的事情,如果不判断pid,两个进程做的事情完全没有区别;
如果错误的话,(比如进程不够等等),系统是不会把你要的进程分给你的,该进程后面的语句就是废话;

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 奇怪:程序一fork子进程时就停住了,似乎根本不能fork子进程啊?
  • unix中的fork2与fork有设么区别?
  • 还是有关fork的问题,fork在一个函数中调用,我被搞胡涂了
  • 程序在fork前申请了内存若干,在fork后子进程是否需要释放父进程之前申请的内存
  • fork()函数入门级问题:fork()与进程数
  • 一个fork的问题
  • 新手的问题关于fork?
  • 如何理解fork函数返回2次啊?
  • 急于明白Fork的用法.请提供中文解释.谢谢.
  • 关于fork的不解
  • 弱弱的问:fork和exec的区别是什么?
  • 关于fork的讨论
  • 关于fork的疑问?
  • fork之后的输出
  • fork() 父子进程执行顺序问题
  • 关于fork创建进程的一个问题
  • exit和fork是什么关系?他们是怎么配合使用的?
  • fork函数,在线等待,马上结贴。谢谢!!!!!!!!!!!!
  • fork的问题
  • 请教 linux的fork从什么版本开始支持COW?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3