在Linux中执行两个C程序时,可以使用来打印它们的本地/私有文件描述符fileno()
。这意味着,当我并行运行两个独立程序并fileno()
在每个程序中进行打印时,打开的第一个文件将打印3个,打开的第二个文件将打印4个,依此类推。
因此,通过使用fileno()
,不可能知道它们之间共享了哪些输入文件。
有什么方法可以打印两个C程序之间共享的输入文件名?
采用
readlink /proc/<pid>/fd/* | sort -u > /tmp/process-<pid>.out
用PID的进程创建一个文件并列出所有文件的列表<pid>
。然后使用comm
(1)查找公用文件,如下所示:
comm -12 /tmp/process-<pid1>.out /tmp/process-<pid2>.out
请注意,这将列出这些程序共享的所有文件。
如果您知道程序使用的特定文件描述符是例如3,4,5,9,11,12,则将第一个命令替换为:
readlink /proc/<pid>/fd/{3,4,5,9,11,12} | sort -u > /tmp/process-<pid>.out
如果您不知道文件描述符,并且想假设所有可供读取的文件描述符(包括stdin)都是输入文件,则必须通过阅读来做一些更聪明的事情/proc/<pid>/fdinfo/<file-descriptor>
,该命令会打印一个flags
字段,其中包含该信息。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句