首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

linux下的fork()函数的使用有关问题?

2013-09-16 
linux下的fork()函数的使用问题?????请问为什么创建前的进程ID是4982为什么使用fork()函数创建了一个子进

linux下的fork()函数的使用问题?????



请问为什么创建前的进程ID是4982  为什么使用fork()函数创建了一个子进程之后  进程ID变成了4983

为什么增加了1。  父进程的ID不是应该不改变吗????? linux ubuntu c
[解决办法]

pid_t fork( void);
若成功调用一次则返回两个值,
子进程返回0,父进程返回子进程ID


父进程返回子进程ID
[/code]


[解决办法]


// 楼主再这样打印看看 一切明了!
#include <stdio.h>
#include <unistd.h>  
int main()
{
    int pid;
    printf("father创建进程前,进程号:%d\n",getpid());
    printf("创建进程前!\n");
    pid=fork();
    printf("child创建进程后,进程号:%d\n",pid);
    if(pid==0)
    {   
        while(1)
        {   
            printf("子进程\n");
            printf("child创建子进程,进程号:%d\n",getpid());
            sleep(2);
        }   
    }   
    else
    {   
        while(1)


        {   
            printf("父进程\n");
            printf("father创建父进程,进程号:%d\n",getpid());
            sleep(2);
        }   
    }   
    return 0;
}


[解决办法]
你在终端输入man fork,看看这个函数。
我记得是复制进程的函数。是相对独立的进程。
[解决办法]
"请问为什么创建前的进程ID是4982  为什么使用fork()函数创建了一个子进程之后  进程ID变成了4983

为什么增加了1。  父进程的ID不是应该不改变吗?????"

4983是子进程的ID,是返回给父进程的值,父进程ID并未改变。
[解决办法]
在程序中多加几个打印输出,就一目了然了,楼主你这是懒啊
[解决办法]
#include <stdio.h>
#include <unistd.h>  
int main()
{
    int pid;
    printf("创建进程前,进程号:%d\n",getpid());
    printf("创建进程前!\n");
    pid=fork();
    printf("创建进程后,进程号:%d\n",pid); <--这里,如何pid>0, 说明是子进程,pid当然会多1了
    if(pid==0)
    {
        while(1)
        {
            printf("子进程\n");
            sleep(2);
        }    
    }
    else
    {
        while(1)
        {
            printf("父进程\n");
            sleep(2);
        }
    }
    return 0;
}

fork之后的代码,父进程和子进程都会执行,
printf("创建进程后,进程号:%d\n",pid);
这句代码子进程和父进程都会执行。子进程打印出子进程的pid了,父进程打印出0
[解决办法]
第二个printf为啥不用getpid()而用pid作参数了呢?
[解决办法]
getpid是应该是程序的pid,不是创建进程的pid 
------解决方案--------------------


呵呵,楼主你其实是概念没理解好,像这种问题介意楼主多编译程序试试,一定能够解决的,在积极理解也会更加深刻,不要一遇到问题就求助。你看看下面的程序,照你的意思修改了一下程序。

        int pid;
        printf("创建进程前,进程号:%d\n",getpid());
        printf("创建进程前!\n");
        pid=fork();
        if(pid==0)
        {
                printf("father pid = %d,child = %d\n",getppid(),getpid());
                while(1)
                {
                        printf("子进程\n");
                        sleep(2);
                }
        }
        else
        {
                printf("father pid = %d,child = %d\n",getpid(),pid);
                while(1)
                {
                        printf("父进程\n");
                        sleep(2);
                }
        }

[解决办法]
应该仔细看一下fork()的用法,若成功调用一次则返回两个值,子进程返回0,父进程返回子进程ID;若出错返回-1
[解决办法]
fork()函数生成的子进程,与父进程共享fork()函数下面的代码,所以,楼主printf应该可以打印两条。
一条是父进程调用的,是fork()函数返回的pid——也就是子进程的id。还有一条是子进程自己的,fork()返回的是0.

热点排行