快乐虾
http://blog.csdn.net/lights_joy/
本文适用于
Cygwin checkout-2008-09-28
vs2008
欢迎转载,但请保留作者信息
在fork子进程初始化完成后,它将跳转到父进程fork时指定的位置:
void
dll_crt0_1 (void *)
{
……………….
if (in_forkee)
{
………………..
longjmp (fork_info->jmp, true);
}
…………………
}
在这里fork_info是父进程调用CreateProcess时传递进来的参数,而jmp则是在父进程的fork函数中指定:
CYG_API int fork ()
{
frok grouped;
……………..
ischild = !!setjmp (grouped.ch.jmp);
volatile char * volatile var_esp;
//__asm__ volatile ("movl %%esp,%0": "=r" (esp));
__asm
{
mov var_esp, esp;
}
if (!ischild)
res = grouped.parent (var_esp);
else
{
res = grouped.child (var_esp);
ischild = true; /* might have been reset by fork mem copy */
}
………………..
}
因此,子进程的第一次跳转将跳到fork函数中setjmp的下一行开始执行。
cygwin fork子进程对父进程数据的复制(2009-9-8)
cygwin下的共享内存区(2009-9-8)
cygwin下的user heap(2009-9-8)
cygwin下的cygheap:从父进程到子进程的复制(2009-9-7)
cygwin下的/etc/fstab(2009-9-7)
cygwin关键技术:fork(2009-9-4)
cygwin关键技术:设备模拟(2009-9-4)
cygwin关键技术:cygheap(2009-9-2)
cygwin关键技术:tls(2009-8-24)