这个问题不是这个问题的重复找出正在运行的进程的当前工作目录?, 因为写入目录可以与工作目录不同。
例如,我通过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”调用。