TA的每日心情 | 开心 2021-12-17 15:14 |
|---|
签到天数: 31 天 [LV.5]常住居民I
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
代码如下
. W. |) p( C7 Y# X) M9 P8 H2 ~#include <stdio.h>
! ^* c" v0 x' ]) n" x6 Y' O, N3 b7 u$ f/ S 2 #include <stdlib.h>' E O, A: D8 j( X- e7 F! ^
3 #include <string.h>
# u% r1 c$ G7 N( a. ~ 4 #include <unistd.h>
6 N% H, W/ i( u0 g" G 5 #include <pthread.h>) S+ q$ s" \8 T
6 #include <sys/stat.h>
/ A& Q+ H5 x# Y: T% d/ ~9 B* o 7 $ c! z% E7 S( K- V$ m8 y. I
8 int main(int argc,char *argv[])) `, z$ A! q( O" F7 s9 M
9 {. U, y; q4 \7 o0 s& F H
10 printf("before fork -1-\n");# |& p' L* z7 G
11 printf("before fork -2-\n");+ H& d2 K: ]' R; O; N8 M) A1 ]
12 printf("before fork -3-\n");
% d: K* u7 V, A; { 13 printf("before fork -4-\n");3 e0 m8 S( r' p" X( v
14 printf("before fork -5-\n");6 E% h- r1 @$ n6 l
15
* E9 I+ }# B% Y 16 pid_t pid = fork();* b0 c1 A1 O' c
17 if(pid == -1){6 ^4 p. x( l$ N0 d' P+ U
18 perror("fork error");0 s6 A* i5 u7 @; m2 D6 h" x2 T
19 exit(1);$ I$ O" f3 K f3 q) L
20 }else if(pid == 0){! ^3 t$ l6 x# V
21 printf("child was created\n");1 `# j% P: ]$ I) L
22 printf("child pid : %d;parent pid : %d\n",getpid(),getppid());
6 C2 w& P. F0 @. l- c* | 23 }else if(pid > 0){# W! {& K+ r m( M+ ]6 @( f
24 printf("I am parent process\n");/ C9 Q' ]5 J% A
25 printf("my child pid : %d from fork\n",pid);' o$ K7 m$ A# Q
26 printf("current process pid : %d;parent parent pid : %d\n",getpid(),getppid());
3 g! N$ h1 F0 x0 H, T# R/ L 27 }* k6 T; W$ b, H" Y. t6 D3 z. M9 I
28 5 h* Y# h+ b* E8 O3 L
29 printf("===============end of file\n");
8 u! N' ]* K3 E) g# x 30 3 g C6 Q. O" K1 \* x
31 return 0;
4 ~9 ?4 n' e+ w# C. C6 S 32 }8 s9 u7 y% c# h* Z) n" w
+ S; y+ u- B5 |: ?6 z4 w编译结果如下0 A6 p( T* D; k2 k4 [0 j/ v
hdh@ubuntu:~/work_linux/linux_c/4_test$ ./obj/fork
- d, x8 a/ x) ]: {: ebefore fork -1-$ Y& R" [# h A
before fork -2-
( W& {' |, g7 U* b8 Qbefore fork -3-& D2 v, k# \4 `8 q9 e0 q" j
before fork -4-
( T% q F, g I3 ^5 E5 mbefore fork -5-- T5 c `2 C X
I am parent process
" J: f. H/ }2 v# R) H2 g0 \, Imy child pid : 65472 from fork
$ p% @! [0 V: k0 s' `; ]current process pid : 65471;parent parent pid : 63901
! D+ }+ n2 E4 ^8 q# e===============end of file7 Z3 x( Z2 V9 X* V6 x3 I
hdh@ubuntu:~/work_linux/linux_c/4_test$ child was created
4 |" d9 F* j# m D3 `, ^5 Rchild pid : 65472;parent pid : 1617
4 L% J6 r0 S! a===============end of file3 I0 c6 L8 f$ K. X! h. N
6 }9 I8 \2 f: f3 x3 |, K5 k" X
& z3 c7 e- _% c
问题点:1 F! z3 @' e4 j+ q
为什么子进程读到的父进程id与父进程读到自己ID不一致。能否解释一下 T5 k+ P+ Y% e) K
子进程打印出parent PID 1617 而父进程说自己PID时654715 B* j7 H* g2 U: j. O0 [6 Z
|
|