これは私のPi 4にあります。
次のコマンドを実行するとき:
#!/bin/bash
strScriptName=$(basename $BASH_SOURCE)
pidof -x "$strScriptName" | tr " " "\n"
pid=$(pidof -x "$strScriptName" | tr " " "\n")
echo $pid
pidof -x "$strScriptName" | tr " " "\n"
私は次のようなものを得ます:
12703
12707 12703
12703
pidofコマンドのみを使用すると単一のPIDが生成されますが、結果を変数に保存すると2つのPIDが生成される理由を説明してください。 (trコマンドをオフにするとPIDが生成されるため、他のコマンドにパイプすることに関連しているようですが、結果を変数に保存すると、なぜ他の結果が出るのかというバグがあります。)
答え1
これは、コマンド置換がBashでシェルプロセスの実際のコピーであるサブシェルを開始するためである可能性が高いです。したがって、2つのシェルがあり、両方がコマンドラインを介して実行されているプロセスとして表示されるため、見つかった場合はbash scriptname.sh
2pidof
つのシェルがあることがわかります。
(パイプは実際にはパイプの特定の部分のサブシェルも実行しますが、シェルは実際のコマンドを実行するのが早すぎるため、これを見ることができない場合があります。)
ただし、必要なものがスクリプトのPIDであれば、このクラスを使用する必要はなく、pidof
PIDをとして使用できます$$
。同様に、呼び出しスクリプトの名前を取得できます$0
。