- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在两个不同的终端上执行了以下操作:
1 任期:
启动在后台写入文件的进程:
└──> while true; do date >> log; sleep 1; done &
[1] 20604
获取后台运行的最后一个进程的PID:
└──> echo $!
20604
第二学期:
显示正在写入的文件内容:
└──> tail -f log
Thu May 7 18:48:20 CEST 2015
Thu May 7 18:48:21 CEST 2015
Thu May 7 18:48:22 CEST 2015
Thu May 7 18:48:23 CEST 2015
Thu May 7 18:48:24 CEST 2015
Thu May 7 18:48:25 CEST 2015
Thu May 7 18:48:26 CEST 2015
Thu May 7 18:48:27 CEST 2015
第一学期:
检查谁在访问文件(注意只有reader)
└──> lsof log
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
tail 21038 wakatana 3r REG 8,1 5340 797966 log
在 kill
之后,第二个终端上的 tail -f
终止并且 lsof
返回空输出:
└──> kill 21038
└──> lsof log
└──>
第二学期:
然后我再次启动 tail -f
,我看到数据仍然写入日志文件。这意味着某些进程仍在写入日志文件:
└──> tail -f log
Thu May 7 18:52:33 CEST 2015
Thu May 7 18:52:34 CEST 2015
Thu May 7 18:52:35 CEST 2015
Thu May 7 18:52:36 CEST 2015
Thu May 7 18:52:37 CEST 2015
Thu May 7 18:52:38 CEST 2015
Thu May 7 18:52:39 CEST 2015
Thu May 7 18:52:40 CEST 2015
在这种情况下,我实际上知道正在写入文件的进程的神秘 PID,它是 PID 20604,所以我可以杀死它,日志文件将停止增长。
我的问题是:
lsof
不显示(即使重复发出)实际正在写入的进程日志文件?我知道 20604 属于 bash
,它不是直接写入文件的 bash,而是子 date
。但是 lsof
既没有显示 bash
也没有显示 date
。PS:使用的shell:GNU bash,版本4.2.37(1)-release (x86_64-pc-linux-gnu)
最佳答案
这里有一个异步采样形式的经典工程问题。
基本上,每经过一段长时间的等待,一个进程就会很快启动,写入文件,然后死掉。
与此完全异步,您运行 lsof
以查找打开的文件 - 但仅在某个时刻有效,在写入文件时可能不匹配 . (实际上,lsof
执行多步操作,但可能只有一次机会捕获任何给定 作者)。
如果您在一个循环中运行 lsof
的次数足够多,您可能会很想这样想,您最终会捕获作者的手脚——也许您会的。但是,根据您系统的调度程序和 I/O 功能的工作方式,写入过程可能会如此简短,以致于在此过程中永远不会有任何其他进程运行的机会。
如果你想要一个你可以在行动中捕捉到的版本,继续在带括号的子 shell 中按时间间隔生成,但使写入成为一个一致的操作:
(while true; do date ; sleep 1; done) > log &
或者,如果你想 try catch 简短的事件,你可以查看 inotify
机制(你可以使用 man inotify
查看它的文档)记住没有 Actor 的身份证明,当 Actor 像这样短暂存在时,您就无法进行 lsof
类型的搜索来找出他是谁。
关于linux - 谁在写我的文件或者为什么 lsof 没有显示作者但读者显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30108060/
我已经运行了命令 sudo lsof -i tcp:46265 输出 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME mysq
文件被 fcntl(非阻塞)或某种自定义方式锁定。所以我正在使用 lsof 并检查进程的 pid 是否在那里。如果 lsof 返回空白,则表示没有使用它。 但是,我的脚本中的 lsof 需要 200
这是我的程序的样子 Reference import java.io.BufferedReader; import java.io.InputStreamReader; public class Ex
我正在使用以下 lsof命令: lsof -iTCP -a -sTCP:^LISTEN -a -p 如果有一些输出,此命令将返回退出代码 0但如果没有输出,退出代码是 1 . echo $? 谁能解
我在想,如果 的输出 lsof -i sshd 21880 root 3r IPv4 4843515 TCP somehost.lu.isp.com:ssh->d
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a software
我想知道每个进程打开的文件数,因此我使用 lsof 命令: lsof -n | awk '{print $2}'|sort |uniq -c |sort -nr| more 我发现一个 pid "93
我使用以下命令来查明文件描述符是否已打开: /usr/sbin/lsof -a -c sqlplus -u ${USER} | grep -l "${FILE_NAME}” 如果不是,我会执行一些操作
我在 linux 系统上使用以下命令: lsof -i -n | egrep '\'|awk '{print $8,$9}' 它产生这样的输出: 192.168.199.52:ssh->192.168
如何让 lsof 生成数字端口信息而不是尝试将端口解析为服务名称? 例如,我希望 TCP *:http (LISTEN) 给我 TCP *:80 (LISTEN) 事实上,如果可能的话,我从不想再次在
当我运行 lsof 命令时,在名称列中,对于套接字,一些数字出现在括号中,如下所示。什么意思? command pid user fd
我正在使用以下 lsof 命令: lsof -iTCP -a -sTCP:^LISTEN -a -p 如果有一些输出,此命令返回退出代码 0,但如果没有输出,则退出代码为 1。 echo $? 谁能
lsof是系统管理/安全的尤伯工具。我大多数时候用它来从系统获得与网络连接相关的信息,但那只是这个强大而又鲜为人知的应用的第一步。将这个工具称之为lsof真实名副其实,因为它是指“列出打开文件(
lsof(list open files)是一个列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以如传输控制
当我运行 pgrep vim | xargs echo,它打印 93868 91234。 当我运行 lsof -p 91234 时,它会打印: COMMAND PID USER FD TY
比如说,我有一个特定的任务来查找 的文件。未开 .我了解如何使用 lsof ( lsof +D ) 获取打开文件的列表。此外,我只需要在所谓的第一级子目录中找到它们。为此,我使用 find带有 max
编辑 1 我在使用给定的参数时遇到问题。也许这是我通过 NSTask 传递参数的方式?关于我如何做到这一点的任何建议? NSTask *file_Task = [NSTask new]; [file_
我使用 lsof 命令只运行一个 setup.sh 实例,如果没有参数值,它工作正常。但是,我需要在 setup.sh 中传递参数,例如 setup.sh machine1 setup.sh mach
我想借助 lsof 在日志中打印有关已打开资源的信息,但我不想让客户看到使用了哪些库。我浏览了 lsof 手册页,但我无法理解如何从输出中仅排除库。有没有简单的方法来做到这一点? 最佳答案 您可以使用
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我是一名优秀的程序员,十分优秀!