我想加载使用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个niceness——这很好,这是我们想要实现的。但它是如何工作的?
最佳答案
当您启动程序(假设它是一个简单的单进程程序)时,您将得到一个进程运行您的程序。到现在为止,一直都还不错。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
确实派生了一个子进程,那么它仍然是正确的。
所以:
当一个程序启动另一个程序时,优先级是否可传递?
是的,在这两种情况下(进程映像替换和子进程创建)。