读书人

fork getpid 返回值解决办法

发布时间: 2012-08-01 17:53:41 作者: rapoo

fork getpid 返回值

C/C++ code
int main(void){    pid_t    pid;    if ((pid = fork()) < 0)        err_sys("fork error");    else         if (pid == 0)        {            printf("pid : %d\n", pid);            printf("child process pid : %d\n", getpid());        }                    else         {            printf("pid : %d\n", pid);            printf("parent process pid : %d\n", getpid());        }    exit(0);}pid : 11784parent process pid : 11783pid : 0child process pid : 11784

子进程用fork和getpid得到为什么不一样?

[解决办法]
父进程用fork和getpid得到也不一样。
fork在父进程里返回新生成的子进程的pid
在子进程里返回0

getpid返回的是调用进程(或者说当前进程)的pid

探讨
子进程用fork和getpid得到为什么不一样?

C/C++ code

int main(void)
{
pid_t pid;
if ((pid = fork()) < 0)
err_sys("fork error");
else
if (pid == 0)
{
printf("pid : %d\n", pid);
……

[解决办法]
lz要man fork

子进程拷贝父进程的副本,但在子进程之中fork的返回值就是0,规定如此。

[解决办法]
fork()函数比较特别,调用一次,两次返回(一次是在子进程中,一次是在父进程中)。
对于父进程,其返回值是新创建的子进程的进程ID;
对于子进程,其返回值是0;

getpid()返回调用进程自己的进程ID。

读书人网 >UNIXLINUX

热点推荐