スクリプトを実行するホスト名と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}')"