pub trait ProcessExt: Debug {
Show 23 methods
// Required methods
fn kill_with(&self, signal: Signal) -> Option<bool>;
fn name(&self) -> &str;
fn cmd(&self) -> &[String];
fn exe(&self) -> &Path;
fn pid(&self) -> Pid;
fn environ(&self) -> &[String];
fn cwd(&self) -> &Path;
fn root(&self) -> &Path;
fn memory(&self) -> u64;
fn virtual_memory(&self) -> u64;
fn parent(&self) -> Option<Pid>;
fn status(&self) -> ProcessStatus;
fn start_time(&self) -> u64;
fn run_time(&self) -> u64;
fn cpu_usage(&self) -> f32;
fn disk_usage(&self) -> DiskUsage;
fn user_id(&self) -> Option<&Uid>;
fn effective_user_id(&self) -> Option<&Uid>;
fn group_id(&self) -> Option<Gid>;
fn effective_group_id(&self) -> Option<Gid>;
fn wait(&self);
fn session_id(&self) -> Option<Pid>;
// Provided method
fn kill(&self) -> bool { ... }
}
Expand description
Contains all the methods of the Process
struct.
Required Methods§
Sourcefn kill_with(&self, signal: Signal) -> Option<bool>
fn kill_with(&self, signal: Signal) -> Option<bool>
Sends the given signal
to the process. If the signal doesn’t exist on this platform,
it’ll do nothing and will return None
. Otherwise it’ll return if the signal was sent
successfully.
If you just want to kill the process, use ProcessExt::kill
directly.
To get the list of the supported signals on this system, use
SystemExt::SUPPORTED_SIGNALS
.
use sysinfo::{Pid, ProcessExt, Signal, System, SystemExt};
let s = System::new_all();
if let Some(process) = s.process(Pid::from(1337)) {
if process.kill_with(Signal::Kill).is_none() {
eprintln!("This signal isn't supported on this platform");
}
}
Sourcefn name(&self) -> &str
fn name(&self) -> &str
Returns the name of the process.
⚠️ Important ⚠️
On Linux, there are two things to know about processes’ name:
- It is limited to 15 characters.
- It is not always the exe name.
If you are looking for a specific process, unless you know what you are doing, in most
cases it’s better to use ProcessExt::exe
instead (which can be empty sometimes!).
use sysinfo::{Pid, ProcessExt, System, SystemExt};
let s = System::new_all();
if let Some(process) = s.process(Pid::from(1337)) {
println!("{}", process.name());
}
Sourcefn cmd(&self) -> &[String]
fn cmd(&self) -> &[String]
Returns the command line.
use sysinfo::{Pid, ProcessExt, System, SystemExt};
let s = System::new_all();
if let Some(process) = s.process(Pid::from(1337)) {
println!("{:?}", process.cmd());
}
Sourcefn exe(&self) -> &Path
fn exe(&self) -> &Path
Returns the path to the process.
use sysinfo::{Pid, ProcessExt, System, SystemExt};
let s = System::new_all();
if let Some(process) = s.process(Pid::from(1337)) {
println!("{}", process.exe().display());
}
§Implementation notes
On Linux, this method will return an empty path if there
was an error trying to read /proc/<pid>/exe
. This can
happen, for example, if the permission levels or UID namespaces
between the caller and target processes are different.
It is also the case that cmd[0]
is not usually a correct
replacement for this.
A process may change its cmd[0]
value
freely, making this an untrustworthy source of information.
Sourcefn pid(&self) -> Pid
fn pid(&self) -> Pid
Returns the PID of the process.
use sysinfo::{Pid, ProcessExt, System, SystemExt};
let s = System::new_all();
if let Some(process) = s.process(Pid::from(1337)) {
println!("{}", process.pid());
}
Sourcefn environ(&self) -> &[String]
fn environ(&self) -> &[String]
Returns the environment variables of the process.
use sysinfo::{Pid, ProcessExt, System, SystemExt};
let s = System::new_all();
if let Some(process) = s.process(Pid::from(1337)) {
println!("{:?}", process.environ());
}
Sourcefn cwd(&self) -> &Path
fn cwd(&self) -> &Path
Returns the current working directory.
use sysinfo::{Pid, ProcessExt, System, SystemExt};
let s = System::new_all();
if let Some(process) = s.process(Pid::from(1337)) {
println!("{}", process.cwd().display());
}
Sourcefn root(&self) -> &Path
fn root(&self) -> &Path
Returns the path of the root directory.
use sysinfo::{Pid, ProcessExt, System, SystemExt};
let s = System::new_all();
if let Some(process) = s.process(Pid::from(1337)) {
println!("{}", process.root().display());
}
Sourcefn memory(&self) -> u64
fn memory(&self) -> u64
Returns the memory usage (in bytes).
use sysinfo::{Pid, ProcessExt, System, SystemExt};
let s = System::new_all();
if let Some(process) = s.process(Pid::from(1337)) {
println!("{} bytes", process.memory());
}
Sourcefn virtual_memory(&self) -> u64
fn virtual_memory(&self) -> u64
Returns the virtual memory usage (in bytes).
use sysinfo::{Pid, ProcessExt, System, SystemExt};
let s = System::new_all();
if let Some(process) = s.process(Pid::from(1337)) {
println!("{} bytes", process.virtual_memory());
}
Sourcefn parent(&self) -> Option<Pid>
fn parent(&self) -> Option<Pid>
Returns the parent PID.
use sysinfo::{Pid, ProcessExt, System, SystemExt};
let s = System::new_all();
if let Some(process) = s.process(Pid::from(1337)) {
println!("{:?}", process.parent());
}
Sourcefn status(&self) -> ProcessStatus
fn status(&self) -> ProcessStatus
Returns the status of the process.
use sysinfo::{Pid, ProcessExt, System, SystemExt};
let s = System::new_all();
if let Some(process) = s.process(Pid::from(1337)) {
println!("{:?}", process.status());
}
Sourcefn start_time(&self) -> u64
fn start_time(&self) -> u64
Returns the time where the process was started (in seconds) from epoch.
use sysinfo::{Pid, ProcessExt, System, SystemExt};
let s = System::new_all();
if let Some(process) = s.process(Pid::from(1337)) {
println!("Started at {} seconds", process.start_time());
}
Sourcefn run_time(&self) -> u64
fn run_time(&self) -> u64
Returns for how much time the process has been running (in seconds).
use sysinfo::{Pid, ProcessExt, System, SystemExt};
let s = System::new_all();
if let Some(process) = s.process(Pid::from(1337)) {
println!("Running since {} seconds", process.run_time());
}
Sourcefn cpu_usage(&self) -> f32
fn cpu_usage(&self) -> f32
Returns the total CPU usage (in %). Notice that it might be bigger than 100 if run on a multi-core machine.
If you want a value between 0% and 100%, divide the returned value by the number of CPUs.
⚠️ To start to have accurate CPU usage, a process needs to be refreshed twice because CPU usage computation is based on time diff (process time on a given time period divided by total system time on the same time period).
⚠️ If you want accurate CPU usage number, better leave a bit of time
between two calls of this method (take a look at
SystemExt::MINIMUM_CPU_UPDATE_INTERVAL
for more information).
use sysinfo::{Pid, ProcessExt, System, SystemExt};
let s = System::new_all();
if let Some(process) = s.process(Pid::from(1337)) {
println!("{}%", process.cpu_usage());
}
Sourcefn disk_usage(&self) -> DiskUsage
fn disk_usage(&self) -> DiskUsage
Returns number of bytes read and written to disk.
⚠️ On Windows and FreeBSD, this method actually returns ALL I/O read and written bytes.
use sysinfo::{Pid, ProcessExt, System, SystemExt};
let s = System::new_all();
if let Some(process) = s.process(Pid::from(1337)) {
let disk_usage = process.disk_usage();
println!("read bytes : new/total => {}/{}",
disk_usage.read_bytes,
disk_usage.total_read_bytes,
);
println!("written bytes: new/total => {}/{}",
disk_usage.written_bytes,
disk_usage.total_written_bytes,
);
}
Sourcefn user_id(&self) -> Option<&Uid>
fn user_id(&self) -> Option<&Uid>
Returns the ID of the owner user of this process or None
if this information couldn’t
be retrieved. If you want to get the User
from it, take a look at
SystemExt::get_user_by_id
.
use sysinfo::{Pid, ProcessExt, System, SystemExt};
let mut s = System::new_all();
if let Some(process) = s.process(Pid::from(1337)) {
eprintln!("User id for process 1337: {:?}", process.user_id());
}
Sourcefn effective_user_id(&self) -> Option<&Uid>
fn effective_user_id(&self) -> Option<&Uid>
Returns the user ID of the effective owner of this process or None
if this information
couldn’t be retrieved. If you want to get the User
from it, take a look at
SystemExt::get_user_by_id
.
If you run something with sudo
, the real user ID of the launched process will be the ID of
the user you are logged in as but effective user ID will be 0
(i-e root).
⚠️ It always returns None
on Windows.
use sysinfo::{Pid, ProcessExt, System, SystemExt};
let mut s = System::new_all();
if let Some(process) = s.process(Pid::from(1337)) {
eprintln!("User id for process 1337: {:?}", process.effective_user_id());
}
Sourcefn group_id(&self) -> Option<Gid>
fn group_id(&self) -> Option<Gid>
Returns the process group ID of the process.
⚠️ It always returns None
on Windows.
use sysinfo::{Pid, ProcessExt, System, SystemExt};
let mut s = System::new_all();
if let Some(process) = s.process(Pid::from(1337)) {
eprintln!("Group ID for process 1337: {:?}", process.group_id());
}
Sourcefn effective_group_id(&self) -> Option<Gid>
fn effective_group_id(&self) -> Option<Gid>
Returns the effective group ID of the process.
If you run something with sudo
, the real group ID of the launched process will be the
primary group ID you are logged in as but effective group ID will be 0
(i-e root).
⚠️ It always returns None
on Windows.
use sysinfo::{Pid, ProcessExt, System, SystemExt};
let mut s = System::new_all();
if let Some(process) = s.process(Pid::from(1337)) {
eprintln!("User id for process 1337: {:?}", process.effective_group_id());
}
Sourcefn wait(&self)
fn wait(&self)
Wait for process termination.
use sysinfo::{Pid, ProcessExt, System, SystemExt};
let mut s = System::new_all();
if let Some(process) = s.process(Pid::from(1337)) {
eprintln!("Waiting for pid 1337");
process.wait();
eprintln!("Pid 1337 exited");
}
Sourcefn session_id(&self) -> Option<Pid>
fn session_id(&self) -> Option<Pid>
Returns the session ID for the current process or None
if it couldn’t be retrieved.
⚠️ This information is computed every time this method is called.
use sysinfo::{Pid, ProcessExt, System, SystemExt};
let mut s = System::new_all();
if let Some(process) = s.process(Pid::from(1337)) {
eprintln!("Session ID for process 1337: {:?}", process.session_id());
}
Provided Methods§
Sourcefn kill(&self) -> bool
fn kill(&self) -> bool
Sends Signal::Kill
to the process (which is the only signal supported on all supported
platforms by this crate).
If you want to send another signal, take a look at ProcessExt::kill_with
.
To get the list of the supported signals on this system, use
SystemExt::SUPPORTED_SIGNALS
.
use sysinfo::{Pid, ProcessExt, System, SystemExt};
let s = System::new_all();
if let Some(process) = s.process(Pid::from(1337)) {
process.kill();
}