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

时间:2017-08-30 22:04:50

标签: linux bash unix terminal

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

我在互联网上看到这条线的变体:

ionice -c2 -n7 nice -n19 [my program to run]

(或)

nice -n19 ionice -c2 -n7 [my program to run]

每个人都没有详细说明。

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

使用htop进行快速测试似乎确实可以确认这是正常的。程序运行在两种情况下都会有19个好处 - 这很棒,这就是我们想要发生的事情。但它是如何运作的?

1 个答案:

答案 0 :(得分:3)

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

nice是一个特殊程序,可以启动另一个具有调整好的程序。当您启动nice -n 19 someprogram时,系统(实际上是shell)会启动一个新流程来执行nice,但新流程不会在新流程中执行someprogram使用新的过程映像(nice替换当前过程映像(someprogram)。

ionice相同。所以nice -n19 ionice -c2 -n7首先启动nice,然后启动ionice(替换自己的过程映像),然后自己创建它然后最终启动someprogram(替换它自己的过程映像),导致单个进程调整了CPU和IO的好处。

话虽如此,自a child process inherits whatever nice value is held by the parent at the time that it is forked以来,如果nice / ionice分叉子进程,情况仍然如此。

所以:

  

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

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