Migration guide

0.29 to 0.30

With this update, the minimum supported Rust version goes up to 1.69.

Major changes

There are two major changes in this update. The first one was that all the traits were removed. It means that now, if you want to use methods on System, you don't need to import SystemExt anymore.

So before you had:

use sysinfo::{System, SystemExt};

// `SystemExt` is needed for both `new` and `refresh_processes`.
let s = System::new();
s.refresh_processes();

And now you have:

use sysinfo::System;

// No need for `SystemExt` anymore!
let s = System::new();
s.refresh_processes();

The second major change was that the System type has been split into smaller types:

  • Components
  • Disks
  • Networks
  • Users

The System type itself still handles CPU, memory and processes.

Finer control over what is refreshed

The *RefreshKind types now have many more options allowing you to control exactly what is retrieved. In particular, the ProcessRefreshKind now allows you to refresh specifically:

  • cmd
  • cpu
  • disk_usage
  • environ
  • exe
  • memory
  • root
  • user

In some cases, like user, you might want this information to be retrieved only if it hasn't been already. For them, a new UpdateKind enum was added. It contains three variants:

  • Never
  • Always
  • OnlyIfNotSet

Like that, you get yet another extra level of control over what's updated and when.

Constants in System have been moved to crate level

System::IS_SUPPORTED is now sysinfo::IS_SUPPORTED_SYSTEM. System::SUPPORTED_SIGNALS is now sysinfo::SUPPORTED_SIGNALS. System::MINIMUM_CPU_UPDATE_INTERVAL is now sysinfo::MINIMUM_CPU_UPDATE_INTERVAL.

System changes

System::refresh_pids and System::refresh_pids_specifics methods have been added. They allow you to be able to refresh multiple PIDs while being able to have support for sysinfo multi-threading context (and much better performance in any case even if disabled).

Some methods are now static methods:

  • boot_time
  • cpu_arch
  • distribution_id
  • host_name
  • kernel_version
  • load_average
  • long_os_version
  • name
  • os_version
  • uptime

Meaning you can call them without having an instance of System:

println!("host name: {}", System::host_name());

A new System::refresh_memory_specifics method and a new MemoryRefreshKind type were added, allowing you to control whether you want both RAM and SWAP memories to be updated or only one of the two. This change was needed because getting SWAP information on Windows is very slow.

System::tasks method is now available on all OSes even if it only returns something on Linux. Its return type is now a Option<HashSet<Pid>> instead of HashMap<Pid, Process>. The tasks are listed in processes.

Disk changes

Disk::name and Disk::file_system now returns &OsStr.

cgroups handling

Before, sysinfo was handling cgroups internally and the users had no control over it. Now there is a System::cgroup_limits method which allows you to query this information if you need it.

Process changes

Process::cwd, Process::exe and Process::root now return an Option<&Path>.

Removal of sort_by methods

If you want to sort Disks, Users or Components, you can do it by calling sort (or equivalents) on the value returned by the list_mut methods.

New linux-netdevs feature

By default, sysinfo excludes network devices because they can make the retrieval hangs indefinitely. If you still want to get network devices knowing this risk, you can enable this feature.

Cpu changes

Information like Cpu::brand, Cpu::vendor_id or Cpu::frequency are not set on the “global” CPU.

CHANGELOG

If you want the full list of changes, take a look at the CHANGELOG.