找回密码
 注册
关于网站域名变更的通知
查看: 337|回复: 1
打印 上一主题 下一主题

linux 进程 ID分析 fork getpid getppid 函数

[复制链接]
  • TA的每日心情
    开心
    2021-12-17 15:14
  • 签到天数: 31 天

    [LV.5]常住居民I

    跳转到指定楼层
    1#
    发表于 2020-10-8 22:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    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
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-11-24 20:48 , Processed in 0.140625 second(s), 23 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表