I have some long-running scripts that sleep while waiting for something to happen. It’d be nice to look at the terminal and know whether the process is working or sleeping. To that end, I replaced some of the sleep(1) invocations with spinner.py, which shows a simple spinner while sleeping.
Now, David R. MacIver pointed out that I of course should’ve enhanced sleep(1) with a
LD_PRELOAD is an environmental variable that tells the Linux dynamic loader to look at given shared objects before loading anything else. This allows, among other things, overwriting calls to the C standard library.
I’ve never used
LD_PRELOAD before, but it turned out to be simple! Create a shared library with a function with the name and signature of the function you want to overwrite, point
LD_PRELOAD to it and you’re done.
A quick search for gnu sleep source tells me that sleep(1) uses nanosleep(2), so that’s the function I rewrote:
Making this work on OS X is left as an exercise for the reader.