util.pposix
POSIX support library
daemonize
pposix.daemonize()
forks the process to the background.
Also closes stdin
, stdout
and stderr
and opens /dev/null
three times to prevent accidentally reusing the first three file descriptors.
Syslog
For logging to syslog.
Function | Description |
---|---|
syslog_open(name, facility) |
Connect to syslog |
syslog_log(level, [section,] message) |
Send a message to syslog |
syslog_setminlevel(level) |
Set minimum log level |
syslog_close() |
Close syslog connection |
process/user id
Return or set some numbers associated with a process. These are thin wrappers around POSIX / C funcitions of the same names.
Function | Description |
---|---|
getpid() |
Get process id. |
getuid() |
Get user id. |
getgid() |
Get group id |
setuid(uid) |
Change to a different user (must be root) |
setgid(uid) |
Change to a different group (must be root) |
initgroups(?) |
Initialize additional groups when changing user |
facility
are strings such as auth
, daemon
, mail
etc to be used by the syslog daemon for routing to the correct log file.
level
is one of debug
, info
, notice
, warn
, error
.
umask
Set umask
, which determines what permissions newly created files get.
mkdir
Create a directory.
pposix.mkdir("/some/dir");
getrlimit, setrlimit
Get or modify limits applied to the calling process, similar to the user space ulimit
tool. Each "resource" have two different limits, one "soft" or active limit and one "hard" limit. The "hard" limit determines the maximum value that the application can set the limit to, and as such can only be decreased.
pposix.getlimit(resource)
if successful returns a boolean true and two numbers. The first being the current "soft" limit for the resource queried, the second being the "hard" maximum that the limit can be increased to.
pposix.setrlimit(resource, limit, hard_limit)
attempts to change the "soft" and "hard" limits to the value given as second and third argument.
uname
Returns a table with information about the kernel and machine, similar to the user space uname
tool.
Example:
= {
uname ["version"] = "#135-Ubuntu SMP Tue Nov 10 13:33:29 UTC 2015";
["domainname"] = "example.com";
["release"] = "3.2.0-95-generic";
["machine"] = "x86_64";
["nodename"] = "server";
["sysname"] = "Linux";
}
setenv
pposix.setenv(name, value)
sets environment variables. Lua itself provides os.getenv(name)
for reading.
meminfo
pposix.meminfo()
returns a table with information from the memory allocator malloc
.
field | description |
---|---|
allocated | This is the total size of memory allocated with sbrk by malloc, in bytes. |
allocated_mmap | This is the total size of memory allocated with mmap, in bytes. |
used | This is the total size of memory occupied by chunks handed out by malloc. |
unused | This is the total size of memory occupied by free (not in use) chunks. |
returnable | This is the size of the top-most releasable chunk that normally borders the end of the heap. |
fallocate
pposix.fallocate(file, offset, length)
requests that some space on the disk is allocated to a file handle. If fallocate()
succeeds, a subsequent write of at most length
bytes to the file should not fail.
abort
Cause an abnormal program termination with core-dump.
isatty
Answers the question of whether some file handle is a terminal device. Handy to determine whether it’s okay to use ANSI escapes such as colors and other.
if pposix.isatty(io.stdout) then
local tc = require "util.termcolours";
print(tc.getstring(tc.getstyle("blue"), "hello"));
else
print("hello");
end