lsof

Alternative to lsof - to detect locked file


A file is locked with either a fcntl (non-blocking) or some custom way. So I'm using lsof and checking if pid of a process is in there. If lsof returns blank than nothing is using it.

However lsof from my script takes 200ms.

On windows when i try to test for if the file is locked i just open the file and on error its locked, this takes 5ms. Is there any alternative to lsof to do a quick test to see if something is got a hold of a file?


Solution

  • The fuser command is a very smart unix utility used to find which process is using a file, a directory or a socket. It also gives information about the user owning the process and the type of access. READ MORE --digitalocean.com

    To show processes accessing a particular directory use :

    fuser -uvm /somedir
    

    The below output shows that, when ran in verbose mode, the fuse utility gives information about the USER, PID, ACCESS and COMMAND

    root@exampleuser-X55CR:~# fuser -v .
                         USER        PID ACCESS COMMAND
    /root:               root       3378 ..c.. vim
                         root       3398 ..c.. bash
                         root       3449 ..c.. bash
                         root      19370 ..c.. bash
    

    fuser is useful in identifying process id opening a particular file.

    lsof is useful to find out all file(s) opened by particular process.

    for more options that go with fuser you can check thier man page man fuser

    here is some :

    ]$ fuser
    No process specification given
    Usage: fuser [ -a | -s | -c ] [ -n SPACE ] [ -SIGNAL ] [ -kimuv ] NAME...
                 [ - ] [ -n SPACE ] [ -SIGNAL ] [ -kimuv ] NAME...
           fuser -l
           fuser -V
    Show which processes use the named files, sockets, or filesystems.
    
        -a        display unused files too
        -c        mounted FS
        -f        silently ignored (for POSIX compatibility)
        -i        ask before killing (ignored without -k)
        -k        kill processes accessing the named file
        -l        list available signal names
        -m        show all processes using the named filesystems
        -n SPACE  search in this name space (file, udp, or tcp)
        -s        silent operation
        -SIGNAL   send this signal instead of SIGKILL
        -u        display user IDs
        -v        verbose output
        -V        display version information
        -4        search IPv4 sockets only
        -6        search IPv6 sockets only
        -         reset options
    
      udp/tcp names: [local_port][,[rmt_host][,[rmt_port]]]