使用fcntl(非阻塞)或某种自定义方式锁定文件.所以我正在使用lsof并检查进程的pid是否在那里.如果lsof返回空白而不是没有使用它.
但是我的脚本中的lsof需要200ms.
在Windows上,当我尝试测试文件是否被锁定时,我只是打开文件,如果错误锁定,则需要5ms.是否有任何替代lsof进行快速测试,看看是否有东西被持有文件?
fuser命令是一个非常智能的unix实用程序,用于查找哪个进程正在使用文件,目录或套接字.它还提供有关拥有进程和访问类型的用户的信息.阅读更多--digitalocean.com
要显示访问特定目录的进程,请使用:
fuser -uvm /somedir
Run Code Online (Sandbox Code Playgroud)
以下输出显示,当以详细模式运行时,fuse实用程序提供有关的信息 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
Run Code Online (Sandbox Code Playgroud)
fuser 在识别打开特定文件的进程ID时很有用.
lsof 有助于找出特定进程打开的所有文件.
有关热熔器的更多选项,您可以查看他们的手册页 man fuser
这里有一些:
]$ 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]]]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7047 次 |
| 最近记录: |