lsop
is a FreeBSD utility to list all processes running with outdated binaries or shared libraries (that is, binaries or shared libraries have been upgraded or simply deleted).
lsop
does not currently work when started in a FreeBSD jail!
Just run it. If everyting works as designed, utility will print all processes running with outdated binaries.
If you experience false-positives (for example java processes might be wrongly accused as outdated) use -c
and -w
switches: -c
will capture current system state in a whitelist file and later -w
can be used to load this file and suppress warnings for those processes.
Exit codes are
0
if no processes need restarting,1
on error of some sort,2
if one or more processes need restarting.Just type make
.
Makefile
contains a simple "test suite". Type make alltests
and it will execute four new sleep
processess lsop
should notify about.
For example:
# make alltests
mkdir -p test1/lib test1/libexec test1/bin
...
mv -f test4/bin/sleep- test4/bin/sleep
# ./lsop
lsop: sysctl: kern.proc.pathname: 58187: No such file or directory
pid jid stat command
58187 9 miss (sleep)
lsop: sysctl: kern.proc.pathname: 58179: No such file or directory
58179 9 miss (sleep)
58170 9 miss .../lsop/test2/bin/sleep
58162 9 miss .../lsop/test1/bin/sleep
lsop
iterates over all running processes and looks through memory-mapped files with read + execute access; then it checks if those files are still available or have been modified/deleted.
Similar information might be acquired using procstat -v <pid>
and fstat -m -p <pid>
.
Since, at this time, kernel blanks file paths when file is deleted or replaced, lsop
cannot distinguish between deleted or replaced file, as lacking path, it cannot check if a new version of file exists or not.