电子产业一站式赋能平台

PCB联盟网

搜索
查看: 128|回复: 0
收起左侧

Linux进程关系

[复制链接]

840

主题

840

帖子

6491

积分

高级会员

Rank: 5Rank: 5

积分
6491
发表于 2024-11-20 08:00:00 | 显示全部楼层 |阅读模式

c3qhvl1f4gb64012788413.gif

c3qhvl1f4gb64012788413.gif

# P# w8 o, g& J* w* X点击上方蓝色字体,关注我们, r5 d/ b8 N& l# i4 o' t' e
在 Linux 系统中,每个进程都拥有一个唯一的标识符,即进程号(PID,Process ID),并有其独特的生命周期。5 W/ h+ ^+ G8 D9 Y2 k% n
+ o3 e. ^4 h: a% [5 O" D& J
每个进程都有一个父进程,而父进程也可能有更上一级的父进程,最终可以追溯到系统的根进程 init,形成一个进程家族树。
7 }! _$ `% j4 D. V  _- ^( a
$ @0 {+ x' ?2 e: |' m当子进程结束时,父进程能够接收子进程的终止通知,并获取其退出状态。
3 f/ a+ \$ x! R8 a' c2 e# |9 |8 p9 W2 m7 R
除此之外,Linux 系统中的进程之间还存在其他层次关系,如进程组和会话。5 M8 i; h: Y! G) {4 c

+ e! x+ M/ Q  ]- X  ^它们可以进一步拓展进程之间的关系,不仅局限于独立进程或父子进程关系,还包括进程组和会话等。
: l0 L# r  s! n: L' q* N9 E% F' z1
8 r" B! e: \, P0 |( S& f$ Q0 q7 \无关系
. n  C% e' \+ a; `# O* t2 Q& ?8 n两个进程之间没有任何依赖关系,彼此独立运行,互不干扰。这类进程可以单独运行和终止,彼此之间没有任何联系。3 w; ?0 ]5 E# l% Z: F1 P# }
2
% Q3 Y: I& a4 @( _2 _+ \+ M, ^# `1 x父子进程关系
4 D2 D0 H7 j  ?9 M) L) I/ G$ b9 c父子进程关系是通过 fork() 系统调用创建的。7 J9 l# m* z2 M& E% N

1 w6 I7 b+ G  u+ w; w. G5 O调用 fork() 的进程称为父进程,而被 fork() 创建出来的新进程称为子进程。父进程和子进程可以通过共享部分资源(如文件描述符)进行协作。
( i* e9 H2 @, U; P# K3 B; O; n* u7 |+ N$ ^* X9 u3 I6 ~, \9 Q
如果父进程在子进程之前终止,则子进程会被操作系统的 init 进程(PID 为 1)接管,此时 init 会成为其新的父进程,保证子进程的状态能够被处理。2 W1 b* M7 Q- w# o  _
32 u0 n4 C8 A1 V; t3 e
进程组
& ^6 r1 e8 L2 o- R0 f" P; Y每个进程除了有自己的进程 ID(PID)和父进程 ID(PPID)外,还隶属于一个进程组,其进程组 ID(PGID)用来标识它所属的进程组。进程组是为了简化多个进程的管理。; R: l  D5 {5 A. j. X

; Y* M0 h$ _1 Q0 _, t例如,如果系统需要同时运行并管理多个相关进程,可以将它们归入同一个进程组,以便统一控制这些进程。0 s- F5 t2 X% U1 i( D. M
进程组的特点:' ^, Q+ i9 H- W3 Z( b
  • 每个进程必定隶属于某个进程组,且只能属于一个进程组。
  • 每个进程组有一个组长进程,其进程 ID 就是进程组的 PGID。
  • 通过在组长进程的 ID 前加负号,可以对整个进程组执行操作。
  • 即使组长进程终止,只要组内仍有其他进程,该进程组依然存在。
  • 新创建的进程会继承其父进程的进程组 ID,除非显式改变。& c2 n- I1 H+ N; N: ?1 V

    ' Z+ B8 ^  r2 A/ H, D

    1 X: |! d! ?8 q  I. Q, h4 b, q获取进程组 ID:通过 getpgrp() 和 getpgid() 系统调用,用户可以获取进程的进程组 ID:
    & b6 \: H" v2 R& S- m
    . z8 Z+ P6 i" ]0 b% o$ P5 S
  • pid_t getpgid(pid_t pid);  // 获取指定进程的进程组 IDpid_t getpgrp(void);       // 获取调用进程的进程组 ID
    . i8 x5 W. L3 _5 j3 h  `" qgetpgrp() 等价于 getpgid(0),即获取调用进程的进程组 ID。
    8 Z3 u' b& T- S, e2 A
    8 ^4 [$ C% d: o& k& c; v设置进程组 ID:通过 setpgid() 系统调用,可以为某个进程设置新的进程组:
    ) f' M% L% ?" c, _$ B' ^1 u9 U
    ' i3 |! K3 ?  z
  • int setpgid(pid_t pid, pid_t pgid);+ g% O' b3 Q. z0 s& B# N0 ?8 ]
    setpgid(pid, pgid) 将 pid 指定的进程加入 pgid 进程组。
    . V  U$ e6 m% C4 k4 H+ d* _  M) j6 U! h, ^
    setpgrp() 是 setpgid(0, 0) 的简写,用于创建一个新的进程组。
    7 r! w9 J# s+ @. a6 f. |: \4
    # ~9 ~1 R' O# c: h6 p8 w, i会话
    / Q$ F7 E! ]% ?( R! |会话是进程管理的另一层结构,包含一个或多个进程组。4 L; f) o' `: l( Y% b+ k

    / r0 T' r4 |, k3 H# h7 M3 y

    lie1mxzuadk64012788513.png

    lie1mxzuadk64012788513.png
    7 n2 i/ x& F# r- `

    : g! f# T# h& c6 w; O  b2 Y1 u会话与进程组之间的关系如下:
    , s! k8 k/ k! R& B7 ]
  • 一个会话可以包含多个进程组。
  • 每个会话只能有一个前台进程组,其它进程组则为后台进程组。
  • 会话的首领是创建该会话的进程,且会话首领也作为新的进程组的组长。6 R4 Q( b5 w4 T+ y& Z

    % [7 i2 |# k. q  l7 N, i% m- I当用户在某个终端登录时,系统会创建一个新的会话。* J/ J3 X' q8 ^, D' Q  u

    " k: n/ R' u& n2 S% n此时,前台进程组中的进程可以接受来自终端的输入和信号,比如 Ctrl + C 产生的 SIGINT 信号。
    ) A/ _7 P; S/ Z) K7 |! A# G3 M8 F; K: j+ ]+ w8 M
    获取会话 ID:通过 getsid() 系统调用可以获取某个进程的会话 ID:: {# K! O* W) C8 h4 h" C6 m* d) u+ k

    $ o( ~6 r" R7 I5 ?. a& m( G0 {
  • pid_t getsid(pid_t pid);3 Q/ M+ f" O) `' \
    如果参数 pid 为 0,则返回调用进程的会话 ID。
    9 X/ s& D& ~) w8 l+ ?% A! x4 S! B1 x0 o0 ?) i/ B/ B
    创建新会话:通过 setsid() 系统调用,当前进程可以创建一个新的会话,并成为该会话的会话首领和新的进程组组长:! d. j0 F  h1 v: n6 f
      j% u. P8 j7 j: V2 y$ E* V3 g
  • pid_t setsid(void);6 S7 T+ i9 [* z
    调用成功后,setsid() 返回新的会话 ID。
    & X6 h" g4 f( ~* E, I, [$ C& F5 D8 j5 Q, X" p( `2 p( M  X3 Q
    Linux 系统通过进程 ID、父子进程关系、进程组和会话等层次结构,提供了灵活的进程管理方式。
    # d  y- o$ M! g  k) f! V+ v% _8 l" g. c$ c7 Z5 k
    进程组简化了对多个相关进程的管理,而会话机制则在多终端、多用户环境下起着重要作用。
    & k. N! K' Y! N( C2 k" A! c
    - W& C6 J2 K, D通过系统调用,用户可以精确控制这些进程关系,以实现复杂的进程管理任务。
    5 l& P( L7 Y4 ^& C2 ^. R

    jrltqu0qt2x64012788613.jpg

    jrltqu0qt2x64012788613.jpg
    ! c) E& \, `8 }* D( B

    1bcap0inolm64012788713.gif

    1bcap0inolm64012788713.gif
    ) p6 M4 ~2 l8 X" q* [
    点击阅读原文,更精彩~
  • 回复

    使用道具 举报

    发表回复

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则


    联系客服 关注微信 下载APP 返回顶部 返回列表