3.3.2. 条件付き (conditional) ステートメント
場合によっては、SystemTap スクリプトの出力が大きすぎることがあるかもしれません。これに対処するには、スクリプトの論理を細分化して、出力をプローブに関連するもしくは有用なものにする必要があります。
これはハンドラーで 条件 を使うことで実行できます。SystemTap は以下のタイプの条件付きステートメントを受け付けます。
- If/Else ステートメント
- 書式は以下のようになります。
if (condition) statement1 else statement2
if (condition) statement1 else statement2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow condition
式がゼロ以外の場合、statement1
が実行されます。condition
式がゼロの場合、statement2
が実行されます。else
節 (else
statement2) はオプションです。statement1
とstatement2
は両方とも、ステートメントブロックになります。例3.9 ifelse.stp
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例3.9「ifelse.stp」 は、5 秒間にシステムが実行する仮想ファイルシステムの読み込み (vfs_read
) と書き込み (vfs_write
) 回数をカウントするスクリプトです。この実行時には、プローブした関数の名前が (条件if (probefunc()=="vfs_read")
に記してあるように)vfs_read
と一致する場合、スクリプトは変数countread
の値を 1 つ増やします。一致しない場合は、countnonread
(else {countnonread ++}
) を増やします。 - While ループ
- 書式は以下のようになります。
while (condition) statement
while (condition) statement
Copy to Clipboard Copied! Toggle word wrap Toggle overflow condition
がゼロ以外であれば、statement
内のステートメントのブロックは実行されます。statement
はステートメントブロックであることが多く、condition
が最終的にゼロとなるように値を変更する必要があります。 - For ループ
- 書式は以下のようになります。
for (initialization; conditional; increment) statement
for (initialization; conditional; increment) statement
Copy to Clipboard Copied! Toggle word wrap Toggle overflow for
ループは、単に while ループの短縮形です。以下が同等のwhile
ループになります。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- >=
- より大か等しい
- <=
- より小か等しい
- !=
- 等しくない