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

一个简单的FORK问题,请大虾指点

    来源: 互联网  发布时间:2015-08-15

    本文导语:  #include  #include  #include  int main() {     pid_t pid;     char *message;     int n;     int exit_code;     printf("fork program startingn");     pid=fork();     switch(pid)     {         case -1:             perror("...

#include 
#include 
#include 

int main()
{
    pid_t pid;
    char *message;
    int n;
    int exit_code;

    printf("fork program startingn");
    pid=fork();
    switch(pid)
    {
        case -1:
            perror("fork failed");
            exit(1);     
        case 0:
            message="This is a child";
            n=5;
            exit_code=37;
            break;
        default:
            message="This is the parent";
            n=3;
            exit_code=0;
            break;
    }
    for(;n>0;n--){
        puts(message);
        sleep(1);
    }
    if(pid=!0){
        int stat_val;
        pid_t child_pid;
        child_pid=wait(&stat_val);
        printf("Child has finished:PID=%dn",child_pid);
        if(WIFEXITED(stat_val))
            printf("child exited with code %dn",WEXITSTATUS(stat_val));  
        else
            printf("child terminated abnormallyn");
    }
    exit(exit_code);
}
运行结果是这样的:
fork program starting
This is a child
This is the parent
This is the parent
This is a child
This is the parent
This is a child
This is a child
This is a child
Child has finished:PID=-1
child terminated abnormally
Child has finished:PID=7224
child exited with code 37  

有两点很奇怪,怎么先出现一个child,然后连续出现两个parent,还有我明明知fork了一次,好像结果看来有两个子进程,而且一个意外地结束了,请大侠指点

|
这个程序不是自己写的吧?
1.fork一次多出一个子child进程,加上原来那个parent进程,共两个对吧,child进程中n=5,parent进程中n=3,所以分别打印"This is XXXX"5次和3次,因为两个进程统一通过内核调度,所以打印出的信息一般是交替出现
2.你把if(pid=!0)改成if(pid != 0)再试试看,至于原因你自己想吧

|
gcc 的时候把-Wall 打开可以避免很多比较低级的错误,这是一个比较好的习惯:)

|
两个进程的调度嘛就没有什么规律了。

|
两个进程交替被调度运行,打印的当然没有什么规律。

|
http://imit.vicp.net/linux.htm

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












  • 相关文章推荐
  • 还是有关fork的问题,fork在一个函数中调用,我被搞胡涂了
  • 一个fork的问题
  • 新手的问题关于fork?
  • fork() 父子进程执行顺序问题
  • fork()函数入门级问题:fork()与进程数
  • fork的问题
  • 请教一个关于fork的问题。
  • minGW编译带fork函数的问题?
  • 一个简单的fork问题(那个高手来帮忙呀)
  • 关于fork创建进程的一个问题
  • fork与socket问题
  • 关于fork()的一个问题!?
  • 问个关于fork的小问题
  • 编程技术其它 iis7站长之家
  • fork()复制进程的问题2
  • fork()问题
  • linuxC中的fork问题,请教大侠帮忙解答
  • 一个简单的fork()问题,求解···在线等
  • fork 带来的问题!
  • fork()复制进程的问题。
  • 奇怪:程序一fork子进程时就停住了,似乎根本不能fork子进程啊?
  • unix中的fork2与fork有设么区别?
  • 程序在fork前申请了内存若干,在fork后子进程是否需要释放父进程之前申请的内存
  • 如何理解fork函数返回2次啊?
  • 急于明白Fork的用法.请提供中文解释.谢谢.
  • 关于fork的不解
  • 弱弱的问:fork和exec的区别是什么?
  • 关于fork的讨论
  • 关于fork的疑问?
  • fork之后的输出
  • exit和fork是什么关系?他们是怎么配合使用的?


  • 站内导航:


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

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

    浙ICP备11055608号-3