Sign up ×
Server Fault is a question and answer site for system and network administrators. It's 100% free, no registration required.

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


ls /proc/<pid>/fd | wc -l

Please elaborate on the difference. Thanks!

share|improve this question
Sounds like homework. – ewwhite Oct 21 '11 at 23:48
Not homework. Added better explanation. I had read the lsof man pages, and while I suspected the answer was memory-mapped files, I wanted a more experienced person's confirmation. – Jared Oct 24 '11 at 16:45

1 Answer 1

up vote 2 down vote accepted

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 as ls /proc/<pid>/fd | wc -l.

The memory maps is available in /proc/<pid>/maps.

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.