/ / Linuxで「nice」と「exec」は協力できますか? -バッシュ

"nice"と "exec"はLinuxで協力できますか? - bash

これは失敗します:

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をシミュレートしてから元のシェルを終了する必要があります。