如何减少Linux上一个进程的所有线程(和子进程)?

托托

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

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

  • 我如何才能将renice所有线程都属于一个给定的进程?
  • 我怎样才能将renice所有子进程都属于一个给定的进程?

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

我知道流程组有时会有所帮助,但是,它们并不总是与我想做的事情相匹配:它们可以包含更广泛或不同的流程集。

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

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

托托

递归查找所有PIDrenice

我们需要获取所有待处理进程(子进程或线程组中的子进程)的PID(“正常”或“线程”)。这应该是递归的(考虑孩子的孩子)。

Anton Leontiev的答案给出了这样做的提示:文件夹中的所有文件夹名称/proc/$PID/task/都是线程的PID,其中包含children列出潜在子进程文件。

但是,它缺乏递归性,因此这里有一个快速而肮脏的shell脚本来查找它们:

#!/bin/sh
[ "$#" -eq 1 -a -d "/proc/$1/task" ] || exit 1

PID_LIST=
findpids() {
        for pid in /proc/$1/task/* ; do
                pid="$(basename "$pid")"
                PID_LIST="$PID_LIST$pid "
                for cpid in $(cat /proc/$1/task/$pid/children) ; do
                        findpids $cpid
                done
        done
}

findpids $1
echo $PID_LIST

如果您要递归地处理PID 1234,那么现在您可以执行以下操作:

renice -n 15 -p $(/path/to/findchildren.sh 1234)

旁注

不错的价值还是CPU份额?

请注意,由于自动任务分组,尤其是在使用systemd时,如今,好的值可能在“整个系统”中不太重要请参阅此答案以获取更多详细信息。

线程和进程之间的区别

注意:此答案准确地解释了Linux线程。

简而言之:内核仅处理“可运行的实体”,即可以运行调度的东西在内核方面,这些实体称为流程。线程只是一种与另一线程共享(至少)内存空间和信号处理程序的进程。每个此类进程都有一个系统范围的唯一标识符:PID(进程ID)。

结果,您可以 renice单独使用每个“线程”,因为它们确实具有自己PID 1


1查看该答案为约PID(的ProcessID)和TID差(线程ID)的详细信息。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何减少Linux上一个进程的所有线程(和子进程)?

来自分类Dev

如何使用htop挂起一个进程及其所有子进程?

来自分类Dev

在Linux上的C语言中,如何获取进程的所有线程?

来自分类Dev

我如何等待除一个子进程之外的所有子进程完成

来自分类Dev

当所有线程完成执行后,如何运行我的最后一个线程?

来自分类Dev

如何确定我有一个带有两个线程的进程,还是两个进程?

来自分类Dev

Kotlin进程等待所有线程完成?

来自分类Dev

OSX-如何查看进程中所有线程的TID?

来自分类Dev

如何获取在VC ++中使用单个进程创建的所有线程句柄列表?

来自分类Dev

杀死Elixir中的主管进程时,杀死所有链接的子进程是一个好习惯吗?

来自分类Dev

有没有办法查看进程在Linux中具有的所有线程的详细信息?

来自分类Dev

父进程有多个子进程,而两个子进程有一个子进程

来自分类Dev

如何在Linux中将进程限制为除一个CPU之外的所有CPU

来自分类Dev

线程创建。我用最后一个线程覆盖了所有线程

来自分类Dev

如何查看Java进程中所有线程的所有上下文切换的总和?

来自分类Dev

Linux中一个进程的所有权(给定的是PID)

来自分类Dev

当前进程没有线程?

来自分类Dev

杀死除一个python脚本和grep进程以外的所有python脚本

来自分类Dev

当另一个子进程完成时,如何终止子进程?

来自分类Dev

使用python multiprocessing子进程如何终止另一个子进程?

来自分类Dev

如何区分一个子进程与其他子进程

来自分类Dev

阻止除一个线程外的所有线程的最佳方法是什么?

来自分类Dev

杀死进程本身和所有子进程的最佳方法

来自分类Dev

如何排除过滤器中Sysinternal的“进程监视器”中除一个进程外的所有进程?

来自分类Dev

你能用相同的代码启动一个线程和一个进程吗?

来自分类Dev

Shell函数来检查是否有一个挂起的进程是该Shell的子进程?

来自分类Dev

一个IE进程会杀死所有IE进程

来自分类Dev

如何杀死所有子进程而不杀死父进程

来自分类Dev

父进程终止后如何杀死所有子进程?

Related 相关文章

  1. 1

    如何减少Linux上一个进程的所有线程(和子进程)?

  2. 2

    如何使用htop挂起一个进程及其所有子进程?

  3. 3

    在Linux上的C语言中,如何获取进程的所有线程?

  4. 4

    我如何等待除一个子进程之外的所有子进程完成

  5. 5

    当所有线程完成执行后,如何运行我的最后一个线程?

  6. 6

    如何确定我有一个带有两个线程的进程,还是两个进程?

  7. 7

    Kotlin进程等待所有线程完成?

  8. 8

    OSX-如何查看进程中所有线程的TID?

  9. 9

    如何获取在VC ++中使用单个进程创建的所有线程句柄列表?

  10. 10

    杀死Elixir中的主管进程时,杀死所有链接的子进程是一个好习惯吗?

  11. 11

    有没有办法查看进程在Linux中具有的所有线程的详细信息?

  12. 12

    父进程有多个子进程,而两个子进程有一个子进程

  13. 13

    如何在Linux中将进程限制为除一个CPU之外的所有CPU

  14. 14

    线程创建。我用最后一个线程覆盖了所有线程

  15. 15

    如何查看Java进程中所有线程的所有上下文切换的总和?

  16. 16

    Linux中一个进程的所有权(给定的是PID)

  17. 17

    当前进程没有线程?

  18. 18

    杀死除一个python脚本和grep进程以外的所有python脚本

  19. 19

    当另一个子进程完成时,如何终止子进程?

  20. 20

    使用python multiprocessing子进程如何终止另一个子进程?

  21. 21

    如何区分一个子进程与其他子进程

  22. 22

    阻止除一个线程外的所有线程的最佳方法是什么?

  23. 23

    杀死进程本身和所有子进程的最佳方法

  24. 24

    如何排除过滤器中Sysinternal的“进程监视器”中除一个进程外的所有进程?

  25. 25

    你能用相同的代码启动一个线程和一个进程吗?

  26. 26

    Shell函数来检查是否有一个挂起的进程是该Shell的子进程?

  27. 27

    一个IE进程会杀死所有IE进程

  28. 28

    如何杀死所有子进程而不杀死父进程

  29. 29

    父进程终止后如何杀死所有子进程?

热门标签

归档