找出进程正在写入哪个目录?

找出进程正在写入哪个目录?

这个问题不是这个问题的重复找出正在运行的进程的当前工作目录?, 因为写入目录可以与工作目录不同。

例如,我通过my_script.sh在 ~/ 中运行两次(一个接一个)来启动两个进程。

在 中my_script.sh,我已将输出写入名称为时间戳的文件夹。因此,尽管工作目录相同,但这两个进程实际上写入不同的目录,例如~/1212_000001/~/1212_000003/。 (第一个进程于12月12日00:00:01开始,第二个进程在2秒后开始)

链接问题中的解决方案为我返回了~/两个进程的相同结果,因此达不到我的目的。

怎么做?

答案1

这取决于脚本的编写方式:

  • 如果直接通过重定向(即my_script.sh > ~/1212_000001/some_file),您可以使用lsof -p <script-pid>,并且您将在输出目录中看到打开的文件
  • 否则, ' 的输出ps axjf将显示脚本启动的子进程的 pid 依赖性,这可能会立即在命令参数中为您提供信息或允许您lsof -p <sub-process-pid>在子进程上运行。

当然,如果这种情况发生在很短的时间内,这个方法就不适用了。

您还可以使用“strace”命令并查找“open”调用。

相关内容