设置在linux上运行的Java程序的nice值

Bra*_*ace 2 java linux thread-priority

我希望我的 Java 程序降低一些优先级,这样它就不会压垮系统。我最初的想法是使用Thread.currentThread().setPriority(5),但这似乎只是它在 JVM 中的优先级。

然后我想也许我会抓住它并调用系统命令,但Thread.getId()也只是 JVM 的 id,所以我什至不知道要传递给什么进程 id renice

Java程序有办法做这样的事情吗?

Jar*_*zek 5

由于我们必须以平台相关的方式执行此操作,因此我从 java 运行一个 shell 进程,并重新调整其父进程。父进程恰好是我们的 java 进程。

import java.io.*;

public class Pid
{
  public static void main(String sArgs[])
    throws java.io.IOException, InterruptedException
  {
    Process p = Runtime.getRuntime().exec(
      new String[] {
        "sh",
        "-c",
        "renice 8 `ps h -o ppid $$`"
        // or: "renice 8 `cat /proc/$$/stat|awk '{print $4}'`"
      }
      );
    // we're done here, the remaining code is for debugging purposes only
    p.waitFor();
    BufferedReader bre = new BufferedReader(new InputStreamReader(
      p.getErrorStream()));
    System.out.println(bre.readLine());
    BufferedReader bro = new BufferedReader(new InputStreamReader(
      p.getInputStream()));
    System.out.println(bro.readLine());
    Thread.sleep(10000);
  }
}
Run Code Online (Sandbox Code Playgroud)

顺便说一句:您是 jEdit 的 Brad Mace 吗?很高兴见到你。