在Linux中结合ionice和nice,以及传递优先级

Kat*_*age 1 unix linux bash terminal

我想加载同时使用ionice(I / O优先级)和nice(进程优先级)来启动程序。

我在网上看到这条线的各种变化:

ionice -c2 -n7 nice -n19 [my program to run]
Run Code Online (Sandbox Code Playgroud)

(要么)

nice -n19 ionice -c2 -n7 [my program to run]
Run Code Online (Sandbox Code Playgroud)

每个人都列出了它,没有任何详细说明。

我的问题是... ionice(第一个程序)设置好(第二个程序)的优先级,如何影响第三个程序(我要运行的程序)?当一个程序启动另一个程序时,优先级是否可传递?

使用htop进行的快速测试实际上可以确认它是否正常运行。在这两种情况下,程序运行都会具有19种优点-太好了,这就是我们想要发生的事情。但是如何运作?

Hug*_* M. 5

当您启动程序时(假设它是一个简单的单进程程序),您将有1个进程在运行您的程序。到目前为止,一切都很好。

nice是一个特殊的程序,它以经过调整的优美程度启动另一个程序。当您启动nice -n 19 someprogram系统(实际上是外壳程序)时,将启动一个新进程来执行nice,但是该新进程又不会someprogram在一个新进程中执行:它用一个新进程映像(替换了当前nice进程映像(someprogram

与相同ionice。因此,nice -n19 ionice -c2 -n7首先启动nice,先做它的事情,然后开始ionice(替换自己的过程映像),再做自己的事,然后终于开始someprogram(替换它自己的过程映像),从而导致单个进程调整了CPU和IO的美观度。

话虽这么说,由于子进程继承nice了它在派生时父级所拥有的任何值,因此如果nice/ ionice确实分叉了子进程,则仍然是正确的。

因此:

当一个程序启动另一个程序时,优先级是否可传递?

是的,在两种情况下(过程映像替换和子过程创建)。