LINUX.ORG.RU

> а sys_fork/do_fork возвращают 0 в child процессе

да... а почему подозрения возникли???

> или только libc-ишный враппер???

а обещал не нажимать '?' три раза подряд...

idle ★★★★★
()
Ответ на: комментарий от idle

>> а sys_fork/do_fork возвращают 0 в child процессе

>да... а почему подозрения возникли???

да вот изучал  исходники изучал но так и не понял откудова собственно берётся 0 в child-процессе

в do_fork мы имеем:

    p->pid = get_pid(clone_flags);
...
    retval = p->pid;
    p->tgid = retval;
...
fork_out:
    return retval;

а в ф-и get_pid не смог найти то место где разруливается результат для родителя и потомка


>а обещал не нажимать '?' три раза подряд...

извините, буду пытатся отвыкнуть

cvv ★★★★★
() автор топика

забодал своими "???" !!!

Pi ★★★★★
()
Ответ на: комментарий от cvv

> в do_fork мы имеем:
>   p->pid = get_pid(clone_flags);
>   return retval;

это все для родителя. для потомка:

copy_process:

        copy_thread(...)
                childregs->eax = 0; // <---- возращаемое значение
                p->thread.eip = (unsigned long) ret_from_fork;

arch/i386/kernel/entry.S:
  ret_from_fork:
        pushl %eax
        call schedule_tail
        GET_THREAD_INFO(%ebp)
        popl %eax                   // <---- там прячется нолик
        jmp syscall_exit

idle ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.