答案1
进程对核心 ID 的分配是暂时的(除非专门锁定),并且工具只能显示瞬时值。
线程可以随时重新调度到不同的核心上(通常在系统调用期间,或者当它超过其时间片时)。多线程进程可以同时在多个内核上运行。
可能有一些优化试图保持一定的稳定性(例如改进缓存),但不能依赖它们。
此外,echo
它是一个内置的 shell——它在现有的 shell 进程内“运行”。
答案2
有 Linux 系统调用getcpu
,它返回线程在进行系统调用时调度的 CPU。
阅读该手册页上的注释,并认识到 Paul 是多么正确:进行系统调用后,您很有可能在返回时被调度到不同的 CPU 内核上。因此,getcpu 仅在过去的某个时间点对线程的 CPU 核心做出有保证的语句。不是现在。
所以,长话短说:
当进程仍在执行时如何获取进程信息?
您可以使用 来获取正在运行线程的 CPU 核心getcpu
,但它立即就过时了。核心分配不是静态的。