What's the fastest way using lsof to find a single open file?

前端 未结 4 733
再見小時候
再見小時候 2021-01-05 16:13

I\'m trying to test a single file if it is open using lsof. Is there a faster way than this?

$result = exec(\'lsof | grep filename | wc -l\');

if($result &         


        
相关标签:
4条回答
  • 2021-01-05 17:02

    I found a much better way. With lsof (tested on version 4.63), you can directly query a specific file:

    if lsof filename > /dev/null; then
        # file is open
    fi
    
    0 讨论(0)
  • 2021-01-05 17:07

    Well, you can skip wc and use the return value of grep (grep returns 0 (i.e. success) if it detects the pattern and 1 (i.e. not-success) if it does not detect the pattern):

    if lsof | grep filename > /dev/null; then
        # filename is in output of lsof
    fi
    

    You can improve this a bit by using grep's -l flag:

    if lsof | grep -l filename > /dev/null; then
    ...
    

    This tells grep to stop looking once it detects it's first match.

    0 讨论(0)
  • 2021-01-05 17:13

    Don't. The answer might change by the time you try to do anything with the result. Instead, try to do whatever you intended to do with the file and handle the "in use" error or "sharing violation".

    0 讨论(0)
  • 2021-01-05 17:14

    Use fuser. It returns non-zero if any of the files specified are in use, and zero if they're all available.

    0 讨论(0)
提交回复
热议问题