标签: lsof

检查命名管道/ FIFO是否打开以进行写入

我为其他进程写入了一个命名管道,并希望检查其他进程是否正确启动,但是不知道它的PID.上下文在屏幕上运行命令,确保命令正确启动.我希望这可行:

mkfifo /tmp/foo
echo hello > /tmp/foo &
lsof /tmp/foo
Run Code Online (Sandbox Code Playgroud)

可悲的是,lsof没有报道echo.inotifywait可能是另一个选项,但并不总是安装,我真的只想轮询一次,而不是阻止直到某个事件.

有没有办法检查命名管道是否打开写入?一般都开放吗?


更新:

一旦两端连接lsof似乎工作.这实际上解决了我的问题,但是为了这个问题,我有兴趣知道是否有可能在没有阅读器的情况下检测到命名管道的初始重定向.

> mkfifo /tmp/foo
> yes > /tmp/foo &
> lsof /tmp/foo
> cat /tmp/foo > /dev/null &
> lsof /tmp/foo
COMMAND   PID     USER   FD   TYPE DEVICE SIZE/OFF     NODE     NAME
yes     16915     user    1w  FIFO   8,18      0t0 16660270 /tmp/foo
cat     16950     user    3r  FIFO   8,18      0t0 16660270 /tmp/foo
Run Code Online (Sandbox Code Playgroud)

bash lsof named-pipes

8
推荐指数
1
解决办法
2325
查看次数

如何在Mac OS X上找到Unix域套接字的另一个点来编写/读取它?

我在运行Mac OS X 10.5的盒子上列出了一个进程(一个守护进程)的打开文件:

>lsof  -p 89
COMMAND PID     USER   FD   TYPE    DEVICE  SIZE/OFF     NODE NAME
...
xxxxx   89 xxxxxxxx    9u  unix 0x34f8990       0t0          ->0x34f8880
Run Code Online (Sandbox Code Playgroud)

我想找到一种方法来打开这个套接字并写入它.(这次是我的痴迷......)

如何找到底层文件的索引节点/名称以便到达该套接字?有没有办法从shell脚本以编程方式解决此地址0x34f888 ?如果不是这样,如何以编程方式进行?

作为评论,我已经启动了netstat命令并得到了这个结果:

> netstat -u
Active LOCAL (UNIX) domain sockets
Address  Type   Recv-Q Send-Q    Inode     Conn     Refs  Nextref Addr
...
 34f8990 stream      0      0        0  34f8880        0        0
...
 34f8880 stream      0      0        0  34f8990        0        0
...
Run Code Online (Sandbox Code Playgroud)

我不是网络/套接字大师.希望这可以提供更多信息

sockets macos networking netstat lsof

7
推荐指数
0
解决办法
1715
查看次数

如何在没有lsof的情况下检查打开的文件

在linux中,我使用lsof来检查文件是由哪个进程打开的.我有一个Android设备,但没有lsof命令.是否有可能找到打开特定文件的进程?

我将使用它来验证MediaPlayer是否持有fd,但应该关闭它.

android lsof

7
推荐指数
2
解决办法
1万
查看次数

使用lsof查找单个打开文件的最快方法是什么?

我正在尝试使用lsof打开单个文件.有比这更快的方法吗?

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

if($result > 0) {
    //file is open
}
Run Code Online (Sandbox Code Playgroud)

我认为如果你知道文件名,他们必须是一种只测试一个文件的方法.我真正需要的只是真或假.

php linux file lsof

6
推荐指数
1
解决办法
7376
查看次数

如何在C/C++应用程序中使用lsof(List Opened Files)?

有没有办法使用获取所有打开的套接字?我知道lsof命令,这就是我正在寻找的,但如何在应用程序中使用它?

我们的想法是通过port数字和数字获得一个打开的套接字的FD pid.

c c++ unix sockets lsof

6
推荐指数
1
解决办法
5500
查看次数

用于JVM的lsof对应物?

lsof 是一个很好的Unix工具,显示所有当前打开的文件句柄.

有没有人知道一个类似的工具,可以在运行的JVM中显示所有打开的文件(通过JVMTI或任何类似的界面)?

在这种特殊情况下,只要知道哪个类有句柄打开就足够了.方法/行甚至整个链到GC根目录都很棒,但处理程序所有者类已经是一个好的开始.

我知道我可以进行堆转储,在分析器中打开并找到它,但这是一项繁琐的工作,特别是对于大堆.

java debugging lsof jvmti

6
推荐指数
1
解决办法
997
查看次数

在java中查询打开的文件描述符和限制

有人知道在 Java 中列出当前打开的文件描述符的方法以及打开文件描述符的数量限制吗?

迄今为止我发现的最好的是https://gist.github.com/jtai/5408684,它可以让我打印 Unix FD 系统最大值以及当前打开描述符的数量。我还没有找到一种纯 Java 方式来列出实际打开的文件的路径/名称。我还没有找到一种纯 Java 方法来列出每个进程对打开文件描述符数量的限制。

我主要对 Solaris 和 Linux 平台感兴趣,但纯 java 比必须执行某些东西要好。我知道我可以使用 pfiles(在 Solaris 上)、lsof(在 Linux 上)和 ulimit(在两者上),但我正在寻找更好的东西。

编辑 1:我主要关心当前进程/jvm 的打开描述符的数量以及该 jvm 的限制。系统范围的统计数据和限制也是一个加分项。

java linux solaris lsof

6
推荐指数
0
解决办法
1266
查看次数

如何在 gst_object_unref() 之后调试带有泄漏文件描述符的 gstreamer 管道?

我有一个自定义管道,在 gstreamer 简写中看起来大致如下:

gst-launch-1.0 rtspsrc location=rtsp://<url-for-stream> ! rtph264depay ! h264parse ! imxvpudec ! *any-sink*
Run Code Online (Sandbox Code Playgroud)
  • 任何接收器并不重要,可以是 fakesink、imxipusink 或其他什么(我在使用 freescale imx 插件的 imx6 平台上)。我可以输出到我想要的任何接收器,问题是一样的。

这种类型的管道在 gst-launch-1.0 中工作得很好,因为它不需要正确地自行清理,但我需要使用直接 GST API 在我的 C++ 应用程序中使用它。这意味着我使用myPipeline = gst_pipeline_new("custom-pipeline"),然后按名称分配每个插件,链接它们,然后运行管道。我后来有一个要求停止管道并调用gst_object_unref(myPipeline). 执行此操作时,我观察到文件描述符被遗忘。后来我需要重新启动管道,因此泄漏情况更加严重。这种情况需要经常发生,以至于泄漏的描述符给了我一个例外:

GLib-ERROR **: Creating pipes for GWakeup: Too many open files

lsof我可以用...分析打开的文件

lsof +E -aUc myGstApplication        
lsof: netlink UNIX socket msg peer info error
COMMAND    PID USER   FD   TYPE     DEVICE SIZE/OFF     NODE NAME
myGstApplication 5943 root    3u  unix 0xabfb6c00      0t0 11200335 type=STREAM
myGstApplication …
Run Code Online (Sandbox Code Playgroud)

debugging lsof file-descriptor gstreamer gstreamer-1.0

6
推荐指数
1
解决办法
2510
查看次数

自动解决rm无法删除路径:设备或资源繁忙错误

/path/to/dir我正在尝试使用该命令删除目录rm -rf。不幸的是我得到了错误

rm: cannot remove '/path/to/dir/.nfsdda293a660f276ca0000000a': Device or resource busy
Run Code Online (Sandbox Code Playgroud)

经过一番研究后,我意识到我需要找到哪个进程正在使用该文件,然后才能删除它:

lsof /path/to/dir/.nfsdda293a660f276ca0000000a
Run Code Online (Sandbox Code Playgroud)

这将返回与进程关联的 PID:

COMMAND   PID
python    28594
Run Code Online (Sandbox Code Playgroud)

然后我杀死 PID 并再次尝试删除,但我仍然收到最初的错误。

如何强制/path/to/dir脚本内的脚本自动删除,无需人工干预?

unix linux bash rm lsof

6
推荐指数
1
解决办法
4万
查看次数

运行 lsof 后 ESTABLISHED 指示符意味着什么

我运行了该命令sudo lsof -i -n -P | grep TCP,想知道是否可以获得有关其输出的更多说明。

具体来说,在这张图片中:

在此输入图像描述

为什么我有一个 IP:PORT 指向另一个 IP:PORT,然后又返回到自身并带有标签“ESTABLISHED”?我对这到底意味着什么感到困惑。

linux network-programming lsof

5
推荐指数
2
解决办法
1957
查看次数