读书人

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

发布时间: 2013-09-16 13:45:21 作者: rapoo

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.

读书人网 >C语言

热点推荐