|0.2.0||Mar 6, 2023|
|0.1.2||Dec 16, 2022|
|0.1.1||Dec 15, 2022|
|0.1.0||Dec 15, 2022|
#33 in macOS and iOS APIs
35 downloads per month
libgetargv is a library that allows you to get the arguments that were passed to another running process on macOS. It is intended to provide roughly the same functionality as reading from
/proc/<pid>/cmdline on Linux. On macOS this is done by parsing the output of the
KERN_PROCARGS2 sysctl, which is very often implemented incorrectly, due to the overlooked possibility of leading empty arguments passed to the target process. This crate is the Rust bindings for the
libgetargv can only see processes running as the same user by default, so be sure your process runs as the desired user (
sudo) or can elevate privileges; n.b. elevating privileges safely is extremely complicated, and will be a target of privilege escalation attacks on macOS so be extremely careful if you go this route, better to defer to the user to elevate privileges for you as needed.
macOS is required as this is a macOS specific
sysctl, even BSD does not implement it. Your system must support
KERN_PROCARGS2, which probably means macOS 10.3 or later, though I haven't tested versions older than 10.7. You'll also need a non-ancient clang (c99 is required) or you'll have to override the compiler flags with
libgetargvto your system (see below).
- Clone this repo and run
- add the crate to your
[target.'cfg(target_vendor = "apple")'.dependencies] getargv = "~0.2.0"
To get access to
libgetargv, sign up for an appropriate sponsorship tier.
git clone https://github.com/getargv/getargv.git.
make install_dylib, installs the library to the
/usr/local/ prefix by default; you can change the install location with the
make PREFIX=/opt install_dylib.
I'm working on building binary artifacts to install without compilation, using
pkg installers, however even once that's done, depeding on your system, it may still be necessary to compile from source; eg. if you have built your own xnu kernel with a custom
libgetargv on macOS 10.7-13, using only the CLT package, not the full Xcode install. If you need to override variables, do so inside the
make command, eg:
make EXTRA_CPPFLAGS=-DMACRO EXTRA_CFLAGS=-std=c17 dylib. If you are trying to build on a version of macOS earlier than 10.7, let me know how it goes.