次の出力を含むAndroidコマンドがあります。
$adb shell "head -20 /d/dma_buf/bufinfo"
Dma-buf Objects:
size flags mode count exp_name buf name
00020480 00000002 00000007 00000003 ion-system-660-vendor.qti.hard dmabuf210
Attached Devices:
Total 0 devices attached
09469952 00000002 00000007 00000003 ion-system-660-vendor.qti.hard dmabuf209
Attached Devices:
kgsl-3d0
Total 1 devices attached
00020480 00000002 00000007 00000003 ion-system-660-vendor.qti.hard dmabuf208
Attached Devices:
Total 0 devices attached
09469952 00000002 00000007 00000003 ion-system-660-vendor.qti.hard dmabuf207
Attached Devices:
kgsl-3d0
Total 1 devices attached
ファイルに同様のエントリがあります。私が望むのは、exp_nameフィールドからpidを抽出し(16バイトより大きいフルネームはカーネルからアクセスできません)、ps pid -o comm=
cf.psを使用してps出力からプロセスのフルネームを取得することです。 [1] $1
awk出力と一緒に印刷します。どうやって入手するのかはやめます。私は次のコマンドで始めました。
$adb shell "sed -n '/dmabuf/p' /d/dma_buf/bufinfo|head -10"|awk '
BEGIN { touch temp} {echo $5 > temp; pid = $(cut -d '-' -f 3,3 temp);}
END { rm temp}
'
ただし、これを行うと、次の構文エラーが発生します。
awk: cmd. line:2: BEGIN { touch temp} {echo $5 > temp; pid = $(cut -d - -f 3,3 temp);}
awk: cmd. line:2: ^ syntax error
[1] Android awkに問題があり、ホストLinuxシステムのユーティリティを使用しました。
$adb shell "awk '/dmabuf/{print}' /d/dma_buf/bufinfo|head -3"
00020480 00000002 00000007 00000003 ion-system-660-vendor.qti.hard dmabuf210
09469952 00000002 00000007 00000003 ion-system-660-vendor.qti.hard dmabuf209
00020480 00000002 00000007 00000003 ion-system-660-vendor.qti.hard dmabuf208
adb shell "awk '/dmabuf/{print NF}' /d/dma_buf/bufinfo|head -3"
6
6
6
したがって、この出力には6つのフィールド(タブ区切り)があります。ただし、個々のフィールドを印刷しようとすると、印刷されず、行全体が印刷されます。
$adb shell "awk '/dmabuf/{print $4}' /d/dma_buf/bufinfo|head -3"
00020480 00000002 00000007 00000003 ion-system-660-vendor.qti.hard dmabuf210
09469952 00000002 00000007 00000003 ion-system-660-vendor.qti.hard dmabuf209
00020480 00000002 00000007 00000003 ion-system-660-vendor.qti.hard dmabuf208
ベストアンサー1
以下を使用してsを抽出できますpid
。
$ awk 'NF == 6 {print $5}' inputfile | grep -Eo '[0-9]+'
660
660
660
660
Androidではを使用しているため、procfs
実際のバイナリをとして扱うことができます/proc/$pid/exe
。ただし、これは一般的なPOSIX規則に従わない魔法の(たとえば)シンボリックリンクであるため、ターゲットを見つけるprocfs
ためのより一般的な方法は使用できません。ただし、以下を使用できますstat
。
$ stat -c '%N' /proc/$$/exe
`/proc/4811/exe' -> `/system/bin/sh'
[...]