我想加载使用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确实派生了一个子进程,那么它仍然是正确的。
所以:
当一个程序启动另一个程序时,优先级是否可传递?
是的,在这两种情况下(进程映像替换和子进程创建)。

08-24 17:30