私は現在スクリプトを実行しているCPUの数を見つける便利な方法を探しています。

私は現在スクリプトを実行しているCPUの数を見つける便利な方法を探しています。

スクリプトを実行するホスト名とCPUの数を印刷する簡単なデモスクリプトを実装したいと思います。

hostname -s出力の最初の部分を担当します。 CPU番号を取得する同様の便利な方法はありますか?

(私が知る限り、通常、プロセスには複数のCPUで実行できる複数のスレッドを含めることができますが、ここではスクリプトが単一のスレッドで実行されているとします。)

答え1

これは上記のJesse_bソリューションと似ていますが、pidを使用してスクリプト情報を要求します。

#!/bin/bash                                                                     

host=$(hostname -s)                                                             
processor=$(ps -hp $$ -o psr)                                                   

echo "Script running on ${host} on processor ${processor}"

この-hオプションはヘッダーを抑制し、この-p $$オプションは指定されたpidを持つプロセスを選択し、$$実行中のスクリプトのpidです。この-o psrオプションは、プロセスが現在割り当てられているプロセッサであるpsrフィールドのみを選択します。

答え2

スクリプトは通常複数のスレッドで実行されますが、これがあなたが探しているものだと思います。スクリプトがプロセスグループを作成するので、これは正確ではないと思います。これは検索であり、ppidスクリプト内の多くのコマンドはpidそのプロセスグループから独自のコマンドを生成します。したがって、完了して閉じたコマンドまたはps -aFこの行以降に開始されたプロセスはキャプチャされません。

#!/bin/bash
hostname -s
echo -e "Proccess:\t$(pgrep "$(basename $0)")"
echo -e "$(ps -aF | grep "$(pgrep $(basename $0))" | awk '{print "CPU:\t\t"$7}')"

関連情報