|
发表于 2003-5-7 01:47:11
|
显示全部楼层
i use two code to explain the reason, welcome for comments.
code 1 is the fork one.
[code:1]
#include <stdio.h>
int main(void)
{
int x=5;
if(fork())
{
x+=30;
printf("%d\n", x);
}
else
printf("%d\n",x);
printf("%d\n",x);
return 0;
}
[/code:1]
code 2 is a simple partent process only
[code:1]
#include <stdio.h>
int main(void)
{
int x=5;
x+=30;
printf("%d\n", x);
printf("%d\n", x);
}
[/code:1]
here is the output from code 1 with 'strace ./code1'
======================
execve("./t2", ["./t2"], [/* 48 vars */]) = 0
uname({sys="Linux", node="dragonfly", ...}) = 0
brk(0) = 0x8049534
open("/etc/ld.so.preload", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
close(3) = 0
open("/etc/ld.so.cache", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=84744, ...}) = 0
mmap2(NULL, 84744, PROT_READ, MAP_PRIVATE, 3, 0) = 0x40014000
close(3) = 0
open("/lib/libc.so.6", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\20_\1\000"..., 1024) = 1024
fstat64(3, {st_mode=S_IFREG|0755, st_size=1422891, ...}) = 0
mmap2(NULL, 1244260, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0x40029000
mprotect(0x40150000, 35940, PROT_NONE) = 0
mmap2(0x40150000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x127) = 0x40150000
mmap2(0x40155000, 15460, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x40155000
close(3) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40159000
munmap(0x40014000, 84744) = 0
fork() = 18126
5
5
--- SIGCHLD (Child exited) ---
fstat64(1, {st_mode=S_IFCHR|0600, st_rdev=makedev(136, 0), ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40014000
write(1, "35\n", 335
) = 3
write(1, "35\n", 335
) = 3
munmap(0x40014000, 4096) = 0
_exit(0) = ?
=================================
here is the output from code 2 with strace ./code2
=================================
execve("./t", ["./t"], [/* 48 vars */]) = 0
uname({sys="Linux", node="dragonfly", ...}) = 0
brk(0) = 0x80494e0
open("/etc/ld.so.preload", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
close(3) = 0
open("/etc/ld.so.cache", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=84744, ...}) = 0
mmap2(NULL, 84744, PROT_READ, MAP_PRIVATE, 3, 0) = 0x40014000
close(3) = 0
open("/lib/libc.so.6", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\20_\1\000"..., 1024) = 1024
fstat64(3, {st_mode=S_IFREG|0755, st_size=1422891, ...}) = 0
mmap2(NULL, 1244260, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0x40029000
mprotect(0x40150000, 35940, PROT_NONE) = 0
mmap2(0x40150000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x127) = 0x40150000
mmap2(0x40155000, 15460, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x40155000
close(3) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40159000
munmap(0x40014000, 84744) = 0
fstat64(1, {st_mode=S_IFCHR|0600, st_rdev=makedev(136, 0), ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40014000
write(1, "35\n", 335
) = 3
write(1, "35\n", 335
) = 3
munmap(0x40014000, 4096) = 0
_exit(3) = ?
========================================== |
|