0

bash スクリプトで実行するコマンドがあります。

daemon -20 $exec -a  -b $var &

コマンドmultiplierでtasksetコマンドを使用したいです。

daemon -20 ; taskset -c 0,1 $exec -a  -b $var &

しかし、うまくいきません。何が問題なのですか。たとえば、タスクセットをエコーで使用すると、機能します。

デーモンでは動作しません。

更新:@chepnerあなたが提案した3番目の方法だと思います.それは可能ですが、proc idを再度抽出したくない.デーモンを使用してデーモンとして実行し、-20をプロセスの適切な値に設定しました.方法がある場合taskset を使用して CPU アフィニティを設定し、nice コマンドを使用して優先度を設定するのも良いでしょう。

4

2 に答える 2

0

私はあなたを正しく理解しているかどうか確信が持てないので、これがあなたの質問に答えていない場合はすみません.

あなたはこれを行うことができます:

daemon -20 $exec -a -b $var &
taskset -p -c 0,1 $!

これにより、デーモン コマンドが実行され、すぐに CPU アフィニティが設定されます。または、

taskset -c 0,1 daemon -20 $exec -a -b $var &

最初に適切なアフィニティでデーモンを起動します。

免責事項: 私は taskset コマンドに詳しくありません。この回答は、タスクセットのマニュアルページを読んだことに完全に基づいています。

daemon編集:コマンドが正確に何をするのかよくわかりません。$exec に格納されたコマンドを特定のアフィニティでバックグラウンドで実行したいだけの場合は、これで十分です。

taskset -c 0,1 $exec -a -b $var &
于 2012-07-23T13:44:15.603 に答える
0

セミコロンは 2 つの異なるプロセスを区切ります (目に見える改行と考えてください)。

を実行するdaemon -20 $exec -a -b $var &と、単一のコマンド が実行されます。このコマンドは、デーモンとして実行するプログラムとしてdaemon変数に格納された引数を (とりわけ) 受け取ります。exec

[私の推測が正しければ、このtasksetコマンドを使用して 2 つのデーモンを開始する必要があります。あなたが望むのは

taskset -c 0,1 daemon -20 taskset -c 0,1 $exec -a  -b $var

更新:私は間違っていたと思いました!とにかく、これにはひどい重複エラーがあり、タスクセットが2回呼び出されているようです。]

いくつかの可能性があります:

  1. daemon taskset -c 0,1 $exec -a -b $var、これは良さそうに見えますが、おそらくtasksetデーモンではなくデーモンを作成するため、間違っていると思われます$exec

  2. taskset -c 0,1 daemon $exec -a -b $var、これは私の以前の回答のわずかに修正された形式であり、余分な呼び出しがtaskset削除されています。これにより、不要な 2 つのデーモンが作成されると思われます。

  3. 最初に で行ったように、デーモンを開始しますdaemon -20 $exec -a -b $var &。次に、$exec現在実行中のプロセス ID を見つけます。最後に、 を実行taskset -c 0,1 -p $PIDします。PIDは のプロセス ID です$exec

#3を使用する必要があると思う理由はdaemontasksetそれぞれがコマンドを引数として取り、そのコマンドを実行するからです。あなたが提案したように、どちらも(簡単に)他の人が開始したコマンドを1行で実行することはできません。


あなたの試み、

daemon -20 ; taskset -c 0,1 $exec -a  -b $var &

daemon何もしないかもしれないし、何もしないかもしれない単一の引数 ( ) だけで呼び出します-20(私はdaemonコマンドに慣れていません)。完了すると、コマンドを呼び出して、tasksetin という名前の実行可能ファイル$execを 2 つのプロセッサで実行します。

于 2012-07-23T13:30:46.633 に答える