TA的每日心情 | 开心 2021-12-17 15:14 |
|---|
签到天数: 31 天 [LV.5]常住居民I
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
代码如下
1 e S( u/ l, l, o#include <stdio.h>& o. L9 o0 [, A1 n7 `
2 #include <stdlib.h>
6 _: E& H/ ^* B" U2 M0 h, f, S 3 #include <string.h>. I2 z) u# N( A( p& n# u$ ?% Y
4 #include <unistd.h>5 j" K& b) E6 B' W
5 #include <pthread.h>+ } I8 g* o7 z
6 #include <sys/stat.h>
4 |2 k) d/ {6 B$ Q5 ^5 o$ f 7
( _* K# b: {' O P+ X7 ] 8 int main(int argc,char *argv[])( a8 J# r H/ R! N, e$ X4 o, ]4 _
9 { e+ O# v9 G3 [. _0 P
10 printf("before fork -1-\n");
! h7 l) j$ f) g1 {3 a 11 printf("before fork -2-\n");
# {& `8 R+ F: h9 o: f- ] 12 printf("before fork -3-\n");& m$ O+ ^% E& u$ {& L4 t; J* p8 \
13 printf("before fork -4-\n");
! l+ F# y7 m7 K; |4 p D 14 printf("before fork -5-\n");
4 v, Y% X) ~2 H& a! T 15 , q0 k7 u: ]# |
16 pid_t pid = fork();
% O. q8 N1 `/ j( n; j8 B5 g 17 if(pid == -1){7 O8 C2 z& D- D0 w6 m2 r
18 perror("fork error");
- w* k( ]. ]9 n" _7 N 19 exit(1);
: J: y5 ~7 k% `% i 20 }else if(pid == 0){: S, y' ]3 [, s4 g( U4 e
21 printf("child was created\n");
7 s, D/ P; {% e* G. j 22 printf("child pid : %d;parent pid : %d\n",getpid(),getppid());# a- b* M, `& V+ h5 ^, y
23 }else if(pid > 0){2 W( E' M: L$ M8 v7 k! w6 e! r1 A1 R
24 printf("I am parent process\n");0 Y, U* |$ q7 J6 \6 R, u6 N8 O
25 printf("my child pid : %d from fork\n",pid);
" @# W) W- h- E1 i7 ^8 n% s 26 printf("current process pid : %d;parent parent pid : %d\n",getpid(),getppid());4 f3 S" V4 ^; E1 r
27 }" ^. @! [; T/ q& K0 j" m/ w9 X
28
( J' t" P+ Q1 R" L 29 printf("===============end of file\n");
' W4 f! P- f4 j- M4 v: z 30
( x2 n' L) \; ?$ v- V6 B! G( n 31 return 0;5 b2 G2 a1 y3 l) m/ n$ x
32 }7 V$ P/ p2 E( P+ t! ?- Y e
2 s+ J, h' m ~+ J/ V+ h+ j编译结果如下& f) a/ D. M) c3 c
hdh@ubuntu:~/work_linux/linux_c/4_test$ ./obj/fork
0 Q }1 U: c) G3 g; ybefore fork -1-; \4 |5 h" |) |& f* S4 G0 y4 e
before fork -2-* ?1 H3 L9 a1 w" l2 B: @
before fork -3-( A, M& D/ N" \7 c3 M9 r
before fork -4-
e( k9 i/ N; T6 e# A- {. Lbefore fork -5-
7 U6 p e: ^2 m/ X" T8 p0 wI am parent process* i- v/ n T% d
my child pid : 65472 from fork
5 ]: f o# N: E5 Q! m; Y/ Y5 Y# D& dcurrent process pid : 65471;parent parent pid : 63901
) m" B. H0 u6 b% [4 b% i===============end of file6 w* A- O9 u- ]+ V4 N6 W: w, V
hdh@ubuntu:~/work_linux/linux_c/4_test$ child was created
5 l9 L+ M- D/ r4 ?: Rchild pid : 65472;parent pid : 1617
% ^; L9 k/ x3 ^3 D \7 Q; t===============end of file
9 B Q0 T; {4 X1 N& \- r
" d+ V4 Z4 J2 B8 O: B3 y7 P" T$ k/ m2 c* Z! ]
问题点:
/ ?9 D) q7 m9 Y+ ^* Y为什么子进程读到的父进程id与父进程读到自己ID不一致。能否解释一下
9 p: L6 s9 D2 S" X# V子进程打印出parent PID 1617 而父进程说自己PID时65471
8 p" J: M0 K" A w% i |
|