我想加载使用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个好处 - 这很棒,这就是我们想要发生的事情。但它是如何运作的?
答案 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
分叉子进程,情况仍然如此。
所以:
当程序启动另一个程序时,优先级是否可传递?
是的,在两种情况下(过程映像替换和子进程创建)。