问题标签 [lsof]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 地址已在使用中,但 netstat 或 lsof 中没有
我尝试在端口 7054 上启动 Python SimpleHTTPServer:
所以,我运行了以下命令:
但我没有结果。
python - 文件被 Python 调试器锁定
我在理解 Python 调试器中奇怪的文件锁定行为时遇到了问题。
我有一个 2TB 的图像文件,我的脚本会读取它。一切都很完美,直到我想用不同的十六进制编辑器读取同一个文件。如果在我开始我的脚本之前在十六进制编辑器中打开文件,一切都很好。如果我在脚本在断点处暂停期间尝试打开文件,我的系统几乎挂起并且变得非常慢。我通常可以从终端杀死 Pyhon 和十六进制编辑器,但它非常慢,最多需要 10 分钟。
在我停止脚本甚至广泛杀死所有 Python 实例之后,同样的问题出现了。此映像所在的磁盘保持锁定状态,无法卸载它(仅使用 diskutil force 命令),如果我尝试在其他任何地方打开文件,系统将挂起。
我也不能一个接一个地启动脚本,下一个脚本只是停止工作并挂起我的系统。
我必须等待最多 10 分钟才能再次使用该文件。
我试图找到使用“sudo lsof +D”命令锁定文件的进程,但它没有列出任何内容。
以下是更多细节: — 我的系统是 Mac Os X 10.9。Python是3.4。我使用 Eclipse 和 Pydev 来开发脚本。— 我使用 open('image.dmg', mode='rb') 命令在 python 中打开文件并使用 close() 关闭它。— 该文件是外部 ExFat 格式化驱动器上的 2TB 磁盘映像。其他文件没有这样的问题。文件在 Finder 设置中被写保护。
谁能指导我正确的方向来找到这个问题的根源?
java - 在java中查询打开的文件描述符和限制
任何人都知道在 Java 中列出当前打开的文件描述符以及打开文件描述符数量的限制的方法吗?
到目前为止我发现的最好的是https://gist.github.com/jtai/5408684,它可以让我打印 Unix FD 系统最大值以及当前打开描述符的数量。我还没有找到一种纯 Java 方法来列出实际打开的文件的路径/名称。我还没有找到一种纯 Java 方法来列出每个进程对打开文件描述符数量的限制。
我主要对 Solaris 和 Linux 平台感兴趣,但是纯 java 比必须执行某些东西要好。我知道我可以使用 pfiles(在 Solaris 上)、lsof(在 Linux 上)和 ulimit(在两者上),但我正在寻找更好的东西。
编辑 1:我主要关心当前进程/jvm 的打开描述符的数量以及该 jvm 的限制。系统范围的统计数据和限制也是一个优点。
c++ - 从 C/C++ 创建和删除文件
我似乎对文件删除在 Linux 上的工作方式感到困惑(在 Mac OS X 上的行为相同)。以下代码写入一个 1GB 的文件,然后立即将其删除。它这样做了 1024 次。我认为由于文件已关闭,它将立即被删除(回收空间,甚至可能回收文件描述符)。相反,如果我查看lsof
,该文件仍被声明为由进程拥有(附加了 (deleted) )。如果我看df
,空间仍然用完。最终,该进程因耗尽允许的打开文件数、我可以提高的限制或空间不足而终止。
这样做的正确方法是什么?我是否可以在进程终止之前删除文件(并回收其空间),或者这是一个没有希望的练习,我需要为我的代码设计另一种设计?
lsof:
linux - lsof列出的管道的FD列是什么意思?
我正在使用以下命令来获取管道列表:
我想知道 FD 列的值是什么意思(第五个http://i.imgur.com/KHczptf.png)。我认为r
和分别w
表示read和write,但是每个字符后面的数字是什么意思?
我知道 FD 表示文件描述符,我想弄清楚列中显示的值是什么意思,如 3r、16w、20r 等。
lsof - 替代 lsof - 检测锁定的文件
使用 fcntl(非阻塞)或某种自定义方式锁定文件。所以我正在使用 lsof 并检查进程的 pid 是否在那里。如果 lsof 返回空白,则没有使用它。
但是我脚本中的 lsof 需要 200 毫秒。
在 Windows 上,当我尝试测试文件是否被锁定时,我只需打开文件并在错误时锁定,这需要 5 毫秒。是否有任何替代 lsof 的方法可以进行快速测试以查看是否有文件保存?
mysql - Mysql Server daemon 已打开或访问太多文件是一个问题
当我检查 mysql 服务器守护程序正在访问的文件数量时,我有一个 mySQL 大小的数据仓库,大小接近 1.4 TB,我很惊讶。
cmd 用户:lsof | grep mysql cnd2 使用:lsof | grep mysql | wc -l 2598 请建议如何减少。这对mysql性能有什么影响。
python - 我可以使用代码从目录中删除文件而不是其 inode 吗?
我对如何删除(删除)文件但仍被进程链接并仍被写入文件感到困惑。我的理解是文件名是目录中指向inode的条目。inode 是一种数据结构,它列出了构成文件的逻辑块。当一个文件被删除时,它的目录条目被删除,但数据和 inode 保持不变。内核检查是否有其他指向该 inode 的链接,如果没有,则删除该 inode 并回收内存。但是这样一个无名的文件是怎么产生的呢?每当我在 python 中打开一个文件并读取或写入它时,它都存在于磁盘上。但是当我在我的 Mac 上发出这个命令时:
我得到一个包含 300 个文件的列表!根据我的阅读,这些文件只有一个链接,即写入它们的进程的链接。如果这些文件也有目录条目,那么至少会有两个链接。那么,在此过程中,写入这些文件的进程删除了它们的目录条目?为什么?如何?
regex - Preview使用的pdf文件的脚本保存路径
嗨,我错过了重启后 osx 恢复会话的现代功能,所以我想编写一个 bash 脚本来保存在 Preview.app 中打开的 pdf 文件,并询问我是否想在最后 2 个脚本之间重新打开 preview.app 中的文件执行系统已重新启动。
我从
lsof | grep '^Preview*pdf$' >> listpreview.txt
但我无法确定适当的正则表达式来隔离路径,lsof 返回的典型行
是
预览 4581 My_user txt REG 14,2 3254550 36522430 /arbitrary_path/filename_with_all_sort_of_character_and_spaces.pdf
- 还有比lsof更直接的方法吗?
- 如何使用 preview.app 中使用的 pdf 文件的路径列表保存 .txt 文件 (?)?
- 如何在文件/文件夹名称中转义各种符号,如 ß 可能(不应该)?
感谢您的回答。
linux - 我的父进程在哪里发送它的 STDERR?
我试图使标题简洁,但想不出一种完全概括问题的方法。这就是我想要做的:在运行 perl 脚本时,我想知道除了“我自己”之外是否有任何其他进程连接到同一个 STDERR 流(在当前 tty 中或可能附加/重定向到同一个STDERR 文件),如果是这样,我的目标是能够区分我的STDERR 错误/警告/详细消息以及来自其他同时运行的程序的任何其他消息。当我检测到这种可能性时,我想将我的脚本名称添加到我打印到 STDERR 的所有消息中,以便用户知道消息来自哪个进程(或者至少哪些来自我编写的脚本)。目前,我不在乎我是如何做到这一点的,也不关心解决方案是否封装了所有可能性——现在让我们称之为概念证明,它为一个体面的默认行为捕获了合理数量的用例。我正试图通过系统调用来做到这一点。
我希望考虑两种情况:来自同级进程的消息在一系列管道命令中同时运行,来自其他子进程的消息由同一个父脚本串行运行。我不会尝试使用同一 STDERR 流上的句柄来处理后台进程的情况,但如果这些被捕获,那将是一个奖励。
我相信我对第一个场景有很好的处理:兄弟进程。我可以使用pgrep -P $ppid
. 兄弟进程的简单存在足以保证脚本名称附加到我的消息中,但我什至可以更进一步并使用 lsof 来确定他们的 stderr 是否与我一样进入相同的 STDERR 流 - 例如它们在后台运行,并且它们的 STDERR 转到相同的 TTY(由文件描述符“2”推断)。我什至可以使用 perl 的 -p 或 -t 函数检查我是否是一系列管道命令的一部分(尽管我不想在文件已使用 '<' 或>',所以单独使用 -p 或 -t 不起作用)。不管,
我还没有充分弄清楚的场景是由父脚本控制的串行运行进程。我的想法是尝试对我的父进程是交互式 shell 还是脚本做出合理的猜测。
我已经尝试阅读 lsof 以确定是否有办法做到这一点。我有点猜测来自交互式外壳/终端的任何错误都不会打印到与我的脚本相同的 STDERR 流,但显然它们会打印,所以我不能简单地查找是否有任何输出从我的 tty父母区分这两种情况。
我创建了一个用于在不同上下文中进行测试的单行代码:
我在 2 个上下文中运行它:一个直接在命令行上,另一个在 shell 脚本中。我在父 PID 上运行的 lsof 中看到的唯一区别是,当在命令行上运行时,有 5 个到 tty 的读/写连接,当从 shell 脚本中运行时,有 3 个到 tty 的连接和对 shell 脚本的一次只读读取。在任何情况下,文件描述符都不是 0、1 或 2。
交互式外壳:
内壳脚本:
所以我的问题是:这里是否有足够的信息来合理地推断父进程是否是交互式 shell?
我可以从父进程的 REGular 只读文件中合理地推断出父进程不是交互式终端会话吗?或者我可以从 tty 的 5 个读/写连接中推断出父级是交互式外壳吗?
为了稍微测试这个想法,我尝试在sleep 1
我的单行代码上方的行上放置一个,以查看在长时间脚本执行期间的某个时间点,脚本的读取是否会脱离 lsof 输出。当我运行它时,我还尝试从 shell 脚本中重定向进出。
在我的用例中,我可以分辨出区别,但我不确定其他 shell 的行为方式。我真的只关心shell脚本。我想不出任何合理的场景,有人从其他任何东西中调用 perl 脚本......