日期:2014-05-16  浏览次数:20945 次

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 : 11784
parent process pid : 11783

pid : 0
child 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。