Linux 的 PID 是进程和线程共享的吗?

输入 ps jfax 查看所有进程

╭─csy@Yoga14S-yjc /mnt/c/Users/17293
╰─➤  ps jfax
 PPID   PID  PGID   SID TTY      TPGID STAT   UID   TIME COMMAND
    0     1     0     0 ?           -1 Sl       0   0:00 /init
    1     7     7     7 ?           -1 Ss       0   0:00 /init
    7     8     7     7 ?           -1 S        0   0:00  \_ /init
    8     9     9     9 pts/0      809 Ss    1000   0:00      \_ -zsh
    9   809   809     9 pts/0      809 R+    1000   0:00      |   \_ ps jfax
    8   513   512   512 ?           -1 S      113   0:00      \_ /usr/bin/pipexec -k -- [ D /usr/bin/etcd ] [ L /usr/bin/logger --tag etcd ] {D 1>L 0} {D 2>L 0}
  513   515   512   512 ?           -1 Sl     113   0:05          \_ /usr/bin/etcd
  513   516   512   512 ?           -1 S      113   0:00          \_ /usr/bin/logger --tag etcd

image.png

使用 top -p 515 命令查看进程号为 515 的详情

top - 21:33:28 up 6 min,  0 users,  load average: 0.00, 0.00, 0.00
Tasks:   1 total,   0 running,   1 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :  12272.9 total,  11875.0 free,    153.8 used,    244.0 buff/cache
MiB Swap:   4096.0 total,   4096.0 free,      0.0 used.  11879.8 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
  515 etcd      20   0   11.5g  39592  16376 S   2.3   0.3   0:06.42 etcd

image.png

按下 shift + H 查看改进程的所有线程

top - 21:34:33 up 7 min,  0 users,  load average: 0.00, 0.00, 0.00
Threads:  20 total,   0 running,  20 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :  12272.9 total,  11874.5 free,    154.2 used,    244.2 buff/cache
MiB Swap:   4096.0 total,   4096.0 free,      0.0 used.  11879.4 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
  518 etcd      20   0   11.5g  39592  16376 S   0.7   0.3   0:00.51 etcd
  528 etcd      20   0   11.5g  39592  16376 S   0.7   0.3   0:00.65 etcd
  517 etcd      20   0   11.5g  39592  16376 S   0.3   0.3   0:01.48 etcd
  519 etcd      20   0   11.5g  39592  16376 S   0.3   0.3   0:00.57 etcd
  520 etcd      20   0   11.5g  39592  16376 S   0.3   0.3   0:00.65 etcd
  524 etcd      20   0   11.5g  39592  16376 S   0.3   0.3   0:00.68 etcd
  527 etcd      20   0   11.5g  39592  16376 S   0.3   0.3   0:00.47 etcd
  515 etcd      20   0   11.5g  39592  16376 S   0.0   0.3   0:00.41 etcd
  521 etcd      20   0   11.5g  39592  16376 S   0.0   0.3   0:00.00 etcd
  522 etcd      20   0   11.5g  39592  16376 S   0.0   0.3   0:00.00 etcd
  523 etcd      20   0   11.5g  39592  16376 S   0.0   0.3   0:00.00 etcd
  525 etcd      20   0   11.5g  39592  16376 S   0.0   0.3   0:00.46 etcd
  526 etcd      20   0   11.5g  39592  16376 S   0.0   0.3   0:00.39 etcd
  529 etcd      20   0   11.5g  39592  16376 S   0.0   0.3   0:00.12 etcd
  530 etcd      20   0   11.5g  39592  16376 S   0.0   0.3   0:00.00 etcd
  545 etcd      20   0   11.5g  39592  16376 S   0.0   0.3   0:00.36 etcd
  743 etcd      20   0   11.5g  39592  16376 S   0.0   0.3   0:00.22 etcd
  744 etcd      20   0   11.5g  39592  16376 S   0.0   0.3   0:00.39 etcd
  808 etcd      20   0   11.5g  39592  16376 S   0.0   0.3   0:00.01 etcd
  816 etcd      20   0   11.5g  39592  16376 S   0.0   0.3   0:00.09 etcd

image.png

可以看到有一堆的进程,并且每个线程都有一个 pid

请问,pid 不是 process id 的意思吗?进程的 id 号?

为什么线程也和进程共享 pid

参考文章:
进程和线程之间有什么根本性的区别?

阅读 3.3k
1 个回答

Stack Overflow上有相关的讨论,你可以参考一下这个:https://stackoverflow.com/que...

简单来说,从用户的角度所有线程都共享一个pid,但是从内核的角度每个线程都有独立的pid(虽然应该叫thread id更为合适)。你的截图里面有些是从用户角度来展示的,有些是从内核角度展示的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
1 篇内容引用
推荐问题
宣传栏