Apple M1/Apple Silicon/arm64 macOS can run x86_64
programs via Rosetta and most M1 systems currently (~March 2021) very likely run a mix of x86_64
and arm64
processes.
Activity Monitor can show the architecture:
but command line tools such as ps
and top
do not due to Apple hiding the details of the proper sysctl()
incantations necessary to get this info.
Patrick Wardle reverse engineered Activity Monitor — https://www.patreon.com/posts/45121749 — and I slapped that hack together with some code from Sydney San Martin — https://gist.github.com/s4y/1173880/9ea0ed9b8a55c23f10ecb67ce288e09f08d9d1e5 — into a nascent, bare-bones command line utility: archinfo
.
It returns columnar output or JSON (via --json
) — that will work nicely with jq
— of running processes and their respective architectures.
Build from source or grab from the releases via my git (https://git.rud.is/hrbrmstr/archinfo) or GH (https://github.com/hrbrmstr/archinfo).
$ archinfo
...
5949 arm64 /System/Library/Frameworks/AudioToolbox.framework/AudioComponentRegistrar
5923 arm64 /System/Library/CoreServices/LocationMenu.app/Contents/MacOS/LocationMenu
5901 x86_64 /Library/Application Support/Adobe/Adobe Desktop Common/IPCBox/AdobeIPCBroker.app/Contents/MacOS/AdobeIPCBroker
5873 arm64 /Applications/Utilities/Adobe Creative Cloud Experience/CCXProcess/CCXProcess.app/Contents/MacOS/../libs/Adobe_CCXProcess.node
5863 arm64 /bin/sleep
5861 x86_64 /Applications/Tailscale.app/Contents/PlugIns/IPNExtension.appex/Contents/MacOS/IPNExtension
5855 x86_64 /Applications/Elgato Control Center.app/Contents/MacOS/Elgato Control Center
5852 x86_64 /Applications/Tailscale.app/Contents/MacOS/Tailscale
5849 arm64 /System/Library/CoreServices/TextInputSwitcher.app/Contents/MacOS/TextInputSwitcher
...
library(tidyverse)
arch <- jsonlite::stream_in(textConnection(system("/usr/local/bin/archinfo --json", intern=TRUE)))
arch %>%
as_tibble() %>%
mutate(
name = basename(name)
) %>%
select(
name, arch
)
## # A tibble: 448 x 2
## executable arch
## <chr> <chr>
## ...
## 50 com.apple.WebKit.WebContent arm64
## 51 com.apple.WebKit.Networking arm64
## 52 com.apple.WebKit.WebContent arm64
## 53 RStudio — tycho x86_64
## 54 QtWebEngineProcess x86_64
## 55 VTEncoderXPCService arm64
## 56 rsession-arm64 arm64
## 57 RStudio x86_64
## 58 MTLCompilerService arm64
## 59 MTLCompilerService arm64
## 60 coreautha arm64
## ...
table(arch[["arch"]])
##
## arm64 x86_64
## 419 29
UPDATE 2021-03-14
My original goal was to use Swift for this, but it dawned on me that the vast majority of the codebase is in C, so I’ve removed the Xcode dependency and simplified the build process.
The updated code also now defaults to columnar output. Use --json
to return ndjson output.
One Trackback/Pingback
[…] *** This is a Security Bloggers Network syndicated blog from rud.is authored by hrbrmstr. Read the original post at: https://rud.is/b/2021/03/13/retrieve-process-run-time-architecture-on-apple-silicon-macs-on-the-comm… […]