Skip to content

Repository files navigation

Linux.ProcessManager

Build StatusNuGetTotal NuGet downloads

Process manager for linux. It's can retrieve processes with linux specific info (uid of owner,gid of owner, executable path ...).

Help support the project:

Buy Me A Coffee

Sample usage

varprocessInfos=ProcessManager.GetProcessInfos();varinitProcess=actual.FirstOrDefault(_ =>_.ProcessName=="systemd");Console.WriteLine($"Name: {initProcess.ProcessName}, "+$"ProcessId: {initProcess.ProcessId}, "+$"Real user id: {initProcess.Ruid}, "+$"Effective user id: {initProcess.Euid}, "+$"User name: {initProcess.UserName}, "+$"Start time: {initProcess.StartTime}, "+$"Process path (exe): {initProcess.ExecutablePath}");
Name: systemd, ProcessId: 1, Real user id: 0, Effective user id: 0, User name: root, Start time: 01.03.2018, Process path (exe): /lib/systemd/systemd

Api

GetProcessInfos

ProcessInfo[]processInfos=ProcessManager.GetProcessInfos();

GetProcessInfos (for processes ids)

ProcessInfo[]processInfos=ProcessManager.GetProcessInfos(new[]{1,2,3});

GetProcessInfos (with predicate)

ProcessInfo[]processInfos=ProcessManager.GetProcessInfos(_=>_.ProcessId==1);

GetProcessInfos (with predicate and id)

ProcessInfo[]processInfos=ProcessManager.GetProcessInfos(new[]{1}, _=>_.ProcessName=="init");

GetProcessInfoById

ProcessInfo[]processInfos=ProcessManager.GetProcessInfoById(1);

GetProcessIds

int[]processInfos=ProcessManager.GetProcessIds();

EnumerateProcessIds (lazy retrieve pid)

IEnumerable<int>processInfos=ProcessManager.EnumerateProcessIds();varinitProcessCmdLine=processInfos.Select(_=>ProcessManager.GetCmdLine(_)).First();

GetCmdLine (Retrieve command line of process (exe + parameters))

varinitProcessCmdLines=ProcessManager.GetCmdLine(1);Console.WriteLine(initProcessCmdLines[0]);
/sbin/init

GetEnvironmentVariables

varpid=1000;varenvVariables=ProcessManager.Instance.GetEnvironmentVariables(processId);Console.WriteLine(envVariables["USER"]);
some_user

GetEnvironmentVariables with predicate

varpid=1000;varenvVariables=ProcessManager.Instance.GetEnvironmentVariables(processId, _=>_.Key=="USER");Console.WriteLine(envVariables["USER"]);
some_user

GetEnvironmentVariable by name

varpid=1000;varvalue=ProcessManager.Instance.GetEnvironmentVariable(processId,"USER");Console.WriteLine(value);
some_user

Kill (by pid)

varpid=1000;varsignal=9;//SIGKILLProcessManager.Instance.Kill(processId,signal);ProcessManager.Instance.Kill(processId,ProcessSignal.SIGKILL);

TryKill

varpid=1000000;// not existing processvarresult=ProcessManager.Instance.TryKill(processId,ProcessSignal.SIGKILL);Console.WriteLine(result);
False

Kill (by process name)

ProcessManager.Instance.Kill("some_process","username",ProcessSignal.SIGKILL,(ex)=>Console.WriteLine(ex.Message));ProcessManager.Instance.Kill("some_process","username");// signal SIGTERMProcessManager.Instance.Kill("some_process",1001/*user id*/,ProcessSignal.SIGKILL,(ex)=>Console.WriteLine(ex.Message));ProcessManager.Instance.Kill("some_process",1001/*user id*/);// signal SIGTERM

Kill (by predicate)

ProcessManager.Instance.Kill((processInfo)=>processInfo.ProcessName=="some_process",ProcessSignal.SIGKILL,(ex)=>Console.WriteLine(ex.Message));ProcessManager.Instance.Kill((processInfo)=>processInfo.ProcessName=="some_process");// signal SIGTERM

License

This software is distributed under the terms of the MIT License (MIT).

Authors

Alexander Chermyanin / LinkedIn

Contributions and bugs reports are welcome.

About

Retrieve processes with user\group id for Linux

Topics

Resources

Stars

7 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages