可以“好”和“exec”在linux中合​​作吗?

时间:2009-06-13 00:46:06

标签: bash

这个失败了:

nice -n 10 exec "$JAVA" $JAVA_HEAP_MAX $NUTCH_OPTS -classpath "$CLASSPATH" $CLASS "$@"

这成功了:

nice -n 10 java test

这是否意味着我不能将nice和exec结合起来?

4 个答案:

答案 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。