Текстовое приключение:
$ 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
Таким образом, вы можете видеть, что когда вы запускаете скрипт, который содержит команду, которая читает файл, на самом деле участвуют три процесса: интерактивный сеанс Bash и его потомки , скрипт и команда в скрипт (плюс ps
, который мы только что запустили).
Таким образом, если вы хотите узнать о файлах, используемых сценарием, вы должны либо получить к ним файлы хотя бы одной командой ps
. Но если вместо этого вы просто хотите узнать, какая программа обращается к конкретному файлу , вы можете задать lsof
напрямую:
$ lsof input.txt
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
tail 927 username 3r REG 0,45 0 2047211 input.txt