Detect Linux Runlevel

Marko Rauhamaa marko at
Tue Dec 6 17:29:00 EST 2016

Tim Chase <python.list at>:

> This works based on my poking at it in both Py2 and Py3:

Great info, Tim.

A word a warning: your code doesn't lock /var/run/utmp before access,
which is a race condition. The file may be updated at any time, and
ordinary file reads may yield corrupted records.

The library functions getutline(), pututline() etc lock the file
internally (although that is not documented). You can see the (advisory
record) locking in action by running the command

   strace who

Since the locking scheme hasn't been documented, the only safe way to
read /var/run/utmp is through the C API functions.

Another thing is that, as stated before, the runlevel business is
legacy. It is still supported by systemd-update-utmp, but for how long
is anybody's guess.


More information about the Python-list mailing list