proctitle
attempts to expose the closest safe approximation of the BSD
[setproctitle()
] function on the platforms it supports.
This can be useful if you wish to expose some internal state to top
or ps
,
or to help an administrator distinguish between multiple instances of your
program.
```rust use proctitle::set_title; let tasks = ["frobrinate", "defroogle", "hodor", "bork"];
for task in &tasks { settitle(format!("example: {}", task)); performtask(task); }
set_title("example: idle"); ```
On Linux or a BSD you could then watch top
or ps
and see the process name
change as it works:
sh
-% cmd &
[1] 8515
-% ps $!
PID TT STAT TIME COMMAND
8515 4 S+ 0:00.06 example: defroggle (cmd)
On BSDs, [setproctitle()
] is used, and should pretty much Just Work. Tested
on FreeBSD 12, DragonFlyBSD 5.4, OpenBSD 6.5, and NetBSD 8.0.
proctitle
uses prctl(PR_SET_NAME)
to name the current thread, with
a truncation limit of 15 bytes. It may be wise to limit set_title()
calls to
the main thread.
More BSD-ish process-global changes are possible by modifying the process environment, but this is not yet supported because it's wildly unsafe.
[SetConsoleTitleW()
] is used to set a title for the console, if any.
In case there is no console (for example, a system service), a dummy named [event handle] is also created. This can be found via tools such as [Process Explorer] (View ⮕ Lower Pane View ⮕ Handles) and [Process Hacker] (Properties ⮕ Handles).
Unsupported platforms merely receive a stub function that does nothing.