これは失敗します:
nice -n 10 exec "$JAVA" $JAVA_HEAP_MAX $NUTCH_OPTS -classpath "$CLASSPATH" $CLASS "$@"
これは成功します:
nice -n 10 java test
これは、「ナイスとエグゼクティブを組み合わせることができない」ということですか?
回答:
回答№1の場合は3私は「本当にそうだ」と思う
exec nice -n 10 "$JAVA" $JAVA_HEAP_MAX $NUTCH_OPTS -classpath "$CLASSPATH" $CLASS "$@"
回答№2の場合は1
試してください:
nice -n 10 sh -c "exec $JAVA $JAVA_HEAP_MAX $NUTCH_OPTS -classpath "$CLASSPATH" $CLASS "$@""
execは実行可能ファイルではありません。しかし、なぜあなたはこれを行う必要があるのか本当に分かりません。
回答№3の場合は1
execが実行すること(現在実行中のプロセスを置き換える)を考えて、プロセスの優先度を個別に調整できます。つまり、topを使用するか、別のプロセスのreniceを使用します。
回答№4の場合は0
execは組み込みの独立した実行可能ファイルではないため、直接実行できません。
Niceは、別のプログラムを取り込んで実行するプログラムです。シェルを介してそのプログラムをフィルタリングしないため、execなどのシェルビルトインでは動作しません。
ただし、さらに根本的な問題があります!
Nice(システムコール)は特に別のプロセスである必要があるという点で問題があります。(非ルート)プロセスは「ナイスネスを低下させることはできず、単に「ナイスネスを増強し、実行し、低下させる」ことはできません。
そのため、あなたがやろうとしていることは、あなたが思っていることをしないでしょう。 いい execなしでniceを実行すると、すでにjava ...に処理されます。既存のシェルは実行を継続します。
これは、組み込みのシェルがniceであっても当てはまります。
実際にこれを行いたい場合は、シェル自体の良さを直接増やすか、nohup(または同様の)素敵なプロセスでexecをシミュレートしてから元のシェルを終了する必要があります。