这个失败了:
nice -n 10 exec "$JAVA" $JAVA_HEAP_MAX $NUTCH_OPTS -classpath "$CLASSPATH" $CLASS "$@"
这成功了:
nice -n 10 java test
这是否意味着我不能将nice和exec结合起来?
答案 0 :(得分:3)
我确信它会是
exec nice -n 10 "$JAVA" $JAVA_HEAP_MAX $NUTCH_OPTS -classpath "$CLASSPATH" $CLASS "$@"
答案 1 :(得分:1)
尝试:
nice -n 10 sh -c 'exec $JAVA $JAVA_HEAP_MAX $NUTCH_OPTS -classpath "$CLASSPATH" $CLASS "$@"'
exec不是可执行文件。不过,我真的不确定你为什么需要这样做。
答案 2 :(得分:1)
考虑一下exec将要做什么(替换当前正在运行的进程),您可以单独调整进程优先级,即使用top或使用来自另一个进程的renice。
答案 3 :(得分:0)
你不能直接使用exec,因为exec是内置的而不是单独的可执行文件。
Nice是一个程序,它接收另一个程序并运行它。它不会通过shell过滤该程序,因此它不适用于像exec这样的shell内置程序。
然而,还有一个更基本的问题!
Nice(系统调用)特别有问题,因为它需要一个单独的进程 - 因为(非根)进程不能降低它的优点,它不能只是“增加我的好处,执行,减少“。
因此,您尝试做的事情不会做您认为会做的事情。 exec会将 nice 进程转换为java ...这已经是你在没有任何exec的情况下运行良好的情况!现有的shell将继续运行。
即使是内置的shell也是如此。
如果你真的想要这样做,你需要直接增加shell自身的优点,或者尝试通过nohup(或类似)模拟exec,然后退出原始shell。