Background: I'm playing around with monitoring the ulimit for running processes for a particular user. (I had occasionally seen processes that were getting started with an incorrect limit.) I asked a couple self-professed Linux gurus, and one suggested lsof -p <pid>
, while the other suggested ls /proc/<pid>/fd
, but neither was positive about which more accurately reflects the actual count towards the max open files limit for a process.
So, which is it?
lsof -p <pid> | wc -l
Or
ls /proc/<pid>/fd | wc -l
Please elaborate on the difference. Thanks!
lsof
will also give you memory mapped .so-files - which technically isn't the same as a file handle the application has control over./proc/<pid>/fd
is the measuring point for open file descriptors - however: Mentioned in the proc-man page - if the main thread of a multithreaded program has terminated, this directory will be unavailable.lsof -p <pid> | grep -v mem | egrep -v '^COMMAND PID' | wc -l
will show you the same items asls /proc/<pid>/fd | wc -l
.The memory maps is available in
/proc/<pid>/maps
.