【问题标题】:Combining ionice and nice in Linux, and transitive priorities在 Linux 中结合 ionice 和 nice 以及传递优先级
【发布时间】:2018-02-08 18:08:51
【问题描述】:

我想加载使用 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 —— 这很好,这是我们想要发生的。但它是如何工作的呢?

【问题讨论】:

    标签: linux bash unix terminal


    【解决方案1】:

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

    nice 是一个特殊的程序,它启动另一个程序并调整好。当您启动nice -n 19 someprogram 时,系统(实际上是shell)会启动一个新进程来执行nice,但该新进程不会反过来在新进程中执行someprogram:它替换当前进程映像( nice) 带有新的过程映像 (someprogram)

    ionice 相同。所以nice -n19 ionice -c2 -n7首先启动nice,然后启动ionice(替换它自己的进程映像),它做它自己的事情然后最后启动someprogram(替换它自己的进程映像),产生一个已调整 CPU 和 IO niceness 的进程。

    话虽如此,因为a child process inherits whatever nice value is held by the parent at the time that it is forked,如果nice/ionice 确实派生了一个子进程,这仍然是正确的。

    所以:

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

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

    【讨论】:

      猜你喜欢
      • 2023-01-16
      • 2011-12-02
      • 1970-01-01
      • 2017-11-15
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 2017-10-02
      • 1970-01-01
      相关资源
      最近更新 更多