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

Sib*_*ing 3 process open-files

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

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

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

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

怎么做?

ton*_*ioc 5

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

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

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

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