标签: thread

为什么`htop`比`ps`显示更多进程

ps xf

26395 pts/78   Ss     0:00  \_ bash
27016 pts/78   Sl+    0:04  |   \_ unicorn_rails master -c config/unicorn.rb                                           
27042 pts/78   Sl+    0:00  |       \_ unicorn_rails worker[0] -c config/unicorn.rb                                        
Run Code Online (Sandbox Code Playgroud)

在 中htop,它显示为: htop 显示多条 unicorn_rails 行

为什么 htop 显示的进程比 ps 多?

process top ps thread htop

231
推荐指数
1
解决办法
11万
查看次数

线程是否在 Linux 上实现为进程?

我正在阅读这本书,Mark Mitchell、Jeffrey Oldham 和 Alex Samuel 合着的Advanced Linux Programming。2001年的,有点老了。但无论如何我觉得它非常好。

但是,我发现它与我的 Linux 在 shell 输出中产生的不同。在第 92 页(查看器中的第 116 页),第 4.5 章 GNU/Linux 线程实现以包含以下语句的段落开头:

GNU/Linux 上 POSIX 线程的实现在一个重要方面不同于许多其他类 UNIX 系统上的线程实现:在 GNU/Linux 上,线程被实现为进程。

这似乎是一个关键点,稍后用 C 代码进行说明。书中的输出是:

main thread pid is 14608
child thread pid is 14610
Run Code Online (Sandbox Code Playgroud)

在我的 Ubuntu 16.04 中,它是:

main thread pid is 3615
child thread pid is 3615
Run Code Online (Sandbox Code Playgroud)

ps 输出支持这一点。

我想从 2001 年到现在,肯定发生了一些变化。

下一页的下一个子章节 4.5.1 信号处理建立在上一条语句的基础上:

信号和线程之间的交互行为因类 UNIX 系统而异。在 GNU/Linux 中,行为是由线程作为进程实现的事实决定的。

看起来这在本书后面会更加重要。有人可以解释这里发生了什么吗?

我见过这个Linux 内核线程真的是内核进程吗?,但这并没有多大帮助。我糊涂了。

这是C代码: …

linux process c thread linux-kernel

74
推荐指数
7
解决办法
3万
查看次数

使用 4.3 内核创建线程失败并显示“资源暂时不可用”

我正在 Arch Linux(内核 4.3.3-2)上运行一个带有多个容器的 docker 服务器。自从我上次重新启动后,容器内的 docker 服务器和随机程序都崩溃了,并显示一条关于无法创建线程或(较少)fork 的消息。具体的错误信息因程序而异,但大多数似乎都提到了具体的错误Resource temporarily unavailable。有关一些示例错误消息,请参见本文末尾。

现在有很多人收到了这个错误信息,并且有很多人对他们做出了回应。真正令人沮丧的是,每个人似乎都在猜测如何解决问题,但似乎没有人指出如何确定存在问题的众多可能原因中的哪一个。

我收集了这 5 个可能的错误原因以及如何验证它们不存在于我的系统中:

  1. /proc/sys/kernel/threads-max( source ) 中配置的线程数有系统范围的限制。在我的情况下,这设置为60613.
  2. 每个线程都在堆栈中占用一些空间。堆栈大小限制是使用ulimit -s( source )配置的。我的壳的极限曾经是8192,但我已经通过将增加其* soft stack 32768/etc/security/limits.conf,因此它ulimit -s现在的回报32768。我也增加了它的码头工人,过程将LimitSTACK=33554432进入/etc/systemd/system/docker.service,和我核实,该限制适用通过查看/proc/<pid of docker>/limits,并通过运行ulimit -s一个泊坞窗容器内。
  3. 每个线程都需要一些内存。虚拟内存限制是使用ulimit -v. 在我的系统上,它设置为unlimited,并且我的 3 GB 内存中有 80% 是空闲的。
  4. 使用 的进程数有限制ulimit -u。在这种情况下,线程算作进程()。在我的系统上,限制设置为30306 …

linux limit fork thread docker

51
推荐指数
2
解决办法
8万
查看次数

如何在 Linux 上重新处理一个进程的所有线程(和子线程)?

Linux没有(还)遵循POSIX.1标准,它的是一renice对过程的影响“的过程中所有的系统范围线程”,因为根据并行线程(7)文档“线程不共用一个很好的价值。”

然而,有时,renice与给定进程相关的“一切”可能很方便(一个例子是 Apache 子进程及其所有线程)。所以,

  • 我如何才能拥有属于给定进程的renice所有线程
  • 我如何才能拥有属于给定进程的renice所有子进程

我正在寻找一个相当简单的解决方案。

我知道流程组有时会有所帮助,但是,它们并不总是符合我想要做的:它们可以包含更广泛或不同的流程集。

使用cgroupmanaged bysystemd也可能会有所帮助,但即使我有兴趣了解它,我也主要寻找“标准”解决方案。

编辑:还有,man (7) pthreads说“一个进程中的所有线程都放在同一个线程组中;线程组的所有成员共享同一个 PID”。那么,甚至有可能renice没有自己的 PID 吗?

linux process nice thread

32
推荐指数
4
解决办法
1万
查看次数

Linux 如何区分线程和子进程?

Linux 实际上并不区分进程和线程,而是将两者都实现为一种数据结构task_struct

那么,Linux 为某些程序提供了什么来让它们从子进程中区分进程的线程?例如,有没有办法查看进程在 Linux 中拥有的所有线程的详细信息?

谢谢。

linux process thread

25
推荐指数
2
解决办法
7972
查看次数

Linux内核线程真的是内核进程吗?

我在很多地方读到 Linux 为 Java VM 中的每个用户线程创建一个内核线程。(我看到术语“内核线程”以两种不同的方式使用:

  1. 为执行核心操作系统工作而创建的线程和
  2. 操作系统知道并安排执行用户工作的线程。

我说的是后一种。)

内核线程是否与内核进程相同,因为 Linux 进程支持父子进程之间的共享内存空间,还是真的是一个不同的实体?

linux process kernel thread linux-kernel

24
推荐指数
3
解决办法
1万
查看次数

如何杀死进程的特定线程?

$ ps -e -T | grep myp | grep -v grep
  797   797 ?        00:00:00 myp
  797   798 ?        00:00:00 myp
  797   799 ?        00:00:00 myp
  797   800 ?        00:00:00 myp
Run Code Online (Sandbox Code Playgroud)

这显示了mypPID = 797的进程和具有不同 SPID 的四个线程。

如何在不杀死整个进程的情况下杀死进程的特定线程。我知道在某些情况下,当对该特定线程存在致命依赖时,这可能根本不可能。但是,在任何情况下都可能吗?是的,如何?

我试过kill 799了,过程本身就终止了。现在我不确定这是因为有依赖项在myp没有进程的情况下导致失败,800或者因为 kill 很简单,无法杀死单个进程。

shell process kill thread multithreading

22
推荐指数
2
解决办法
9万
查看次数

Unix 中的进程、内核线程、轻量级进程和用户线程之间的关系是什么?

Vahalia 的 Unix Internal 有图表显示了进程、内核线程、轻量级进程和用户线程之间的关系。本书主要关注 SVR4.2,并详细探讨了 4.4BSD、Solaris 2.x、Mach 和 Digital UNIX。请注意,我不是在询问 Linux。

  1. 对于每个流程,该流程背后是否始终存在一个或多个轻量级流程?图 3.4 似乎是肯定的。

    为什么图 3.5(a) 显示进程直接位于 CPU 之上,中间没有轻量级进程?

  2. 对于每个轻量级进程,在轻量级进程下是否总是只有一个内核线程?图 3.4 似乎是肯定的。

    为什么图 3.5(b) 直接在进程之上显示轻量级进程,中间没有任何内核线程?

  3. 内核线程是唯一可以调度的实体吗?

  4. 轻量级进程是否仅通过调度底层内核线程来间接调度?

  5. 进程是否仅通过调度底层轻量级进程来间接调度?

图 3-4。 轻量级流程

图 3-5。 用户线程实现


更新:

我问了一个类似的问题 Linux是一个轻量级进程附加到 Linux 中的内核线程吗? 我猜可能是因为操作系统概念这本书隐含地介绍了使用 Unix 的概念,而 Unix 和 Linux 可能有所不同,所以我阅读了 Unix 内核。

我感谢当前的回复,但我希望重新打开帖子,以便我可以接受其他回复。

process kernel bsd system-v thread

14
推荐指数
1
解决办法
6366
查看次数

如何在linux中杀死进程下的单个线程?

在此处输入图片说明

这些是数据包接收器进程的各个线程。有没有办法杀死任何单个线程?Linux 是否提供任何特定命令可以终止或向进程下的任何特定线程发送停止信号?

linux kill thread

13
推荐指数
2
解决办法
1万
查看次数

了解pid_max、ulimit -u 和thread_max 之间的区别

我正在尝试了解 Linux 进程。我对各自的术语感到困惑pid_max,ulimit -uthread_max

这些术语之间究竟有什么区别?有人可以澄清这些差异吗?

process thread linux-kernel ulimit

12
推荐指数
2
解决办法
4万
查看次数

标签 统计

thread ×10

process ×8

linux ×6

linux-kernel ×3

kernel ×2

kill ×2

bsd ×1

c ×1

docker ×1

fork ×1

htop ×1

limit ×1

multithreading ×1

nice ×1

ps ×1

shell ×1

system-v ×1

top ×1

ulimit ×1