Open-source project
microsoft/ProcMon-for-Linux avatar
microsoft/ProcMon-for-Linux

ProcMon for Linux: syscall tracing from the Sysinternals lineage

A Linux version of the Procmon Sysinternals tool

4,746 stars296 forksCMIT

At a glance

What is it?
Microsoft's Linux reimagining of Process Monitor traces syscalls and presents them in a terminal UI or a SQLite trace file. It is a preview tool aimed at Linux developers debugging live systems, with a narrow Ubuntu-focused install path.
Who is it for?
Adopt ProcMon for Linux if you are on Ubuntu 18.04 or a compatible build host and want a syscall-level view with a familiar Procmon interaction model, including headless capture to a SQLite file for later inspection. Do not adopt it if you need a vendor-supported, distro-agnostic tracer, or if you expect the README to walk you through failure recovery; the README documents no rollback path.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 16 days ago.
What is it written in?
Mainly C, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 30, 2026, and from our analysis. They are not legal advice.

Editorial analysis

What ProcMon for Linux is solving, and for whom

The README describes Procmon as a Linux reimagining of the classic Procmon tool from the Sysinternals suite, and says it provides a convenient and efficient way for Linux developers to trace syscall activity on the system. That sentence is the whole scope statement. The audience is Linux developers who already know what a syscall trace looks like and want the Procmon interaction model on Linux rather than a new mental model. The project is labelled Preview in the README heading, which is worth taking literally: this is not positioned as a finished replacement for the Windows tool, and the requirements section names a single OS, Ubuntu 18.04 lts. If you are on another distribution, the README does not promise anything. The repository does carry INSTALL.md and BUILD.md as separate documents, so the install story is deliberately split from the usage story, and the README points at both rather than inlining them.

How the tracer works: eBPF capture, SQLite storage, TUI or headless output

The mechanism visible from the repository layout is a capture pipeline: syscall activity is collected, optionally written to a trace file, and then either displayed in a terminal UI or left on disk for later reading. The presence of getsyscalls/ and gnu/ at the top level, plus vendor/ and cmake/, indicates that syscall metadata is generated at build time rather than hardcoded, and that the build pulls in vendored dependencies. The README's usage block is the clearest statement of the data flow. A run without -c produces an interactive view. A run with -c FILEPATH switches to what the README calls headless mode and writes captured events to the file you name, with procmon.db used in the example. A separate invocation with -f FILEPATH reopens that file inside the TUI. That split matters: capture and inspection are decoupled, so you can record on a machine and read the trace elsewhere without re-running the tracer. The -e flag narrows capture to a comma separated list of system calls, and -p narrows it to a comma separated list of process IDs. Both filters are applied at capture time, not as a view filter, which means a trace recorded with the wrong filter cannot be widened afterwards.

Installing ProcMon for Linux and capturing a first trace

The README does not inline install steps. It states the requirements and then points to INSTALL.md for installation and BUILD.md for building from source. The requirements it does list are an Ubuntu 18.04 lts OS, cmake >= 3.14 as a build-time dependency, and libsqlite3-dev >= 3.22, also build-time only. The build-time qualifier is worth noticing: it tells you the runtime does not need the SQLite development headers, only whatever the produced binary links against.

Because the README defers to INSTALL.md and BUILD.md, the only commands that can be reproduced here without inventing flags are the usage examples the README itself gives. The simplest is an unfiltered trace of everything on the system, which requires elevated privileges:

bash
sudo procmon

That invocation traces all processes and syscalls, per the README. Expect a terminal UI populated with a live stream of events. On a busy machine this is a lot of output, which is why the filtered form exists.

To trace two specific process IDs, the README gives this form:

bash
sudo procmon -p 10,20

The -p value is a comma separated list, so no space after the comma. To combine a process filter with a syscall filter, the README shows this example:

bash
sudo procmon -p 20 -e read,write,openat

Here only process 20 is traced, and only read, write and openat calls are captured. Note the syscall name openat, not open. Getting the name wrong is a silent mistake: the README does not document what happens when -e receives a syscall name the tracer does not recognise.

For unattended capture, the headless mode writes events to a file instead of the terminal:

bash
sudo procmon -p 35 -c procmon.db

After that run, procmon.db holds the captured events. To read it back in the TUI:

bash
sudo procmon -f procmon.db

The -f flag opens an existing Procmon trace file. The README's own example uses the filename procmon.db for both writing and reading, which is a reasonable default to copy. The remaining documented option, -l FILEPATH, logs debug traces to a file, and -h/--help prints the help screen.

Where the single-OS requirement bites

The requirements section names Ubuntu 18.04 lts and nothing else. That is the sharpest limitation in the README, and it is not framed as a limitation there, just as a fact. Two consequences follow. First, if you are on a different distribution or a newer Ubuntu release, you are outside the documented envelope, and the README offers no statement about whether the tracer works anyway. Second, Ubuntu 18.04 is old enough that a reader may be running it only in a container or a legacy fleet, which changes the deployment question from can I install this to do I want to maintain an 18.04 host to run it. The repository does include a .devcontainer/ directory, which suggests a container-based development path exists, but the README does not describe using it to run the tool. There is also a privileges dimension: every README example is prefixed with sudo, because syscall tracing at system scope requires it. That is inherent to the task rather than a design flaw, but it means ProcMon for Linux is not something you casually run as an unprivileged user, and the README does not discuss any capability-based alternative to full sudo.

ProcMon for Linux versus strace and perf trace

The obvious comparison is strace, the long-standing syscall tracer on Linux. The difference in approach is structural rather than cosmetic. strace attaches to one process or command and prints a textual stream to a terminal or a file, with output shaped for reading line by line. ProcMon for Linux captures into a SQLite-backed trace file and presents a terminal UI over it, with process and syscall filters chosen before capture. That gives you a queryable artifact and a browsing interface at the cost of a build step and a specific OS requirement. If your question is why did this one process fail on this one call, strace's direct output is often faster to read and installs from your distribution's package manager. If your question is what did this set of processes do across a window of time, and you want to keep that record and reopen it, the trace-file model is the more natural fit. perf trace sits closer to the strace end of that spectrum. The README itself makes no comparison to any of these tools, so treat this as a design distinction you can observe from the documented interface, not as a claim the project makes.

Maintenance, licensing and what upgrading costs you

The repository is not archived, and the last push was on 2026-09-14. Releases are numbered and dated: 2.2.0 on 2026-03-25, 2.2.1 on 2026-05-07, and 2.2.2 on 2026-09-10. That cadence suggests the project is being touched, though the README still carries the Preview label and the version numbering has not reached 3.x. The licence is MIT, and the README carries the Microsoft copyright line alongside it. MIT is permissive: it allows reuse and redistribution with the licence and copyright notice preserved, and it comes with no warranty. That last point matters more than usual for a tracing tool that runs with sudo on production hosts. This is not legal advice, and if you are redistributing a modified build you should read LICENSE and NOTICE.txt in the repository rather than relying on the one-line summary in the README. On upgrade cost, the README does not describe a migration path between 2.2.x releases, and it does not document rollback. What it does document is a trace file format you can reopen with -f, which means a trace captured on one version is only as portable as the file format allows; the README does not state whether that format is stable across versions.

Editorial conclusion

Adopt ProcMon for Linux if you are on Ubuntu 18.04 or a compatible build host and want a syscall-level view with a familiar Procmon interaction model, including headless capture to a SQLite file for later inspection. Do not adopt it if you need a vendor-supported, distro-agnostic tracer, or if you expect the README to walk you through failure recovery; the README documents no rollback path. Before relying on it, verify the cmake and libsqlite3-dev versions your distribution provides, confirm that INSTALL.md covers your platform, and check whether the process IDs you intend to monitor are reachable under the privileges you have.

Frequently asked questions

Is ProcMon for Linux the same as Process Explorer?

No. The README describes Procmon as a Linux reimagining of the classic Procmon tool from the Sysinternals suite, and says it traces syscall activity. Process Explorer is not mentioned anywhere in the README, so the two are not presented as equivalent.

Is there a Process Monitor equivalent for Linux?

ProcMon for Linux is Microsoft's own Linux counterpart, described in the README as a Linux reimagining of the classic Procmon tool from the Sysinternals suite. It traces syscall activity and requires Ubuntu 18.04 lts according to the requirements section.

What is the difference between procmon and Procmon64?

The README does not mention Procmon64 at all, so it documents no difference between the two. ProcMon for Linux is presented only as the Linux version of Procmon, built from source with cmake and libsqlite3-dev.

What is procmon.exe used for?

The README does not describe procmon.exe. It documents the Linux binary, invoked as procmon, which traces syscall activity and accepts flags such as -p for process IDs, -e for syscalls, and -c for headless capture to a file.

What is the best resource monitor tool for Linux?

The README makes no comparison to other monitoring tools and does not claim to be a resource monitor. It positions ProcMon for Linux specifically as a way to trace syscall activity on the system, with process and syscall filters applied at capture time.

Official sources

  1. Issues
  2. License: MIT
  3. microsoft/ProcMon-for-Linux on GitHub
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/microsoft-procmon-for-linux.svg)](https://hysenlabs.com/projects/microsoft-procmon-for-linux)