|
APUE中在说明vfork时举了下面的例子:
#include <sys/types.h>
#include "ourhdr.h"
int glob = 6; /* external variable in initialized data */
int
main(void)
{
int var; /* automatic variable on the stack */
pid_t pid;
var = 88;
printf("before vfork\n"); /* we don't flush stdio */
if ( (pid = vfork()) < 0)
err_sys("vfork error");
else if (pid == 0) { /* child */
glob++; /* modify parent's variables */
var++;
exit(0); /* child terminates */
}
/* parent */
printf("pid = %d, glob = %d, var = %d\n", getpid(), glob, var);
exit(0);
}
当子进程用exit结束时,由于其在父进程的空间运行,所以exit关闭了所有标准I/O流.后面的printf由于标准输出被关闭,故返回-1.
但是,我试验的结果是仍然输出
before vfork
pid = 4381, glob = 7, var = 89
这是为什么?难道linux下面的vfork有所改变? |
|