Bash 无法查看进程打开的文件
我知道我可以使用lsof-p或ls/proc//fd列出进程打开的文件 然而,我的问题是,假设我运行了一个bash脚本,它正在访问某个文件X 当我运行bash脚本并执行lsof-p或ls/proc//fd时,我将bash脚本名称视为进程打开的文件之一 是否在此处列出文件X,或者通过任何其他方式告诉我文件X已在此处访问?基于文本的冒险:Bash 无法查看进程打开的文件,bash,file-descriptor,lsof,Bash,File Descriptor,Lsof,我知道我可以使用lsof-p或ls/proc//fd列出进程打开的文件 然而,我的问题是,假设我运行了一个bash脚本,它正在访问某个文件X 当我运行bash脚本并执行lsof-p或ls/proc//fd时,我将bash脚本名称视为进程打开的文件之一 是否在此处列出文件X,或者通过任何其他方式告诉我文件X已在此处访问?基于文本的冒险: $ cd "$(mktemp --directory)" $ touch input.txt $ cat > test.sh <<EOF >
$ cd "$(mktemp --directory)"
$ touch input.txt
$ cat > test.sh <<EOF
> #!/usr/bin/env bash
> tail -f input.txt
> EOF
$ chmod u+x test.sh
$ ./test.sh &
[1] 921
$ ps --forest -g $(ps -o sid= -p $!) w
PID TTY STAT TIME COMMAND
574 pts/4 Ss 0:00 bash
921 pts/4 S 0:00 \_ bash ./test.sh
927 pts/4 S 0:00 | \_ tail -f input.txt
984 pts/4 R+ 0:00 \_ ps --forest -g 574 w
如果你没有在列表中看到X,你应该在你的问题中清楚地注意到这一点。@MadPhysicast-我不确定这是否可行,这就是问题的原因。我已经修改了这个问题。所以从编程的角度来说,没有简单的方法:)
$ lsof input.txt
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
tail 927 username 3r REG 0,45 0 2047211 input.txt