bug: add bindings to grab ppid in some cases on macos #825
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
A description of the change and what it does. If relevant (such as any change that modifies the UI), please provide screenshots of the change:
The sysinfo crate grabs data in a way that sometimes will not work based on permissions on macOS, leading to some missing data - one case this comes up is parent PIDs, particularly noticeable in tree mode. Unless you run the program with
sudo
, if the parent PID is 1, the current sysinfo crate will fail to grab the parent PID for a process.This can be circumvented by taking a page from htop's book and use
kinfo_procs
(see here). This is actually whatheim
uses, and we can leverage some of its implementation over here to grab ppid in cases that sysinfo fails. In the future, we can further leverage this to get even more data (e.g. for missing processes).We can see this demonstrated here - left is the new implementation, right is the old. We see how the left one correctly shows the tree structure since it can actually detect the PPIDs, while the right fails to do this correctly since it cannot find the PPID for some of the processes and ends up promoting those processes to orphans.
Issue
If applicable, what issue does this address?
Closes: #
Testing
If relevant, please state how this was tested. All changes must be tested to work:
If this is a code change, please also indicate which platforms were tested:
Checklist
If relevant, ensure the following have been met:
cargo fmt
)README.md
, help menu, etc.)