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.