Проверьте, перенаправлен ли уже запущенный процесс в Linux? - PullRequest
0 голосов
/ 03 ноября 2018

Учитывая PID процесса, есть ли способ узнать, перенаправлен ли этот процесс на stdin или stdout?

У меня есть одно приложение, которое читает со стандартного ввода. Для удобства я обычно запускаю это приложение с перенаправленным stdin из файла, например:

app < input1.txt

Проблема в том, что иногда я запускаю приложение и забываю, какой входной файл я использовал. Есть ли способ узнать, какой файл был использован для перенаправления ввода?

Использование ps -aux | grep PID позволяет мне увидеть используемую командную строку. Но не дает мне никакой информации о stdin или stdout.

Я также пытался заглянуть в top, а также в /proc/PID/*, но ничего не нашел.

Я использую CentOS 7, если это поможет.

1 Ответ

0 голосов
/ 05 ноября 2018

Вы должны просто посмотреть на /proc/<PID>/fd для получения этой информации. Например, если я перенаправлю stdin для команды из файла:

sleep inf < somefile.txt

Тогда я заполняю находку в соответствующем каталоге /proc:

$ ls -l /proc/12345/fd
lr-x------. 1 lars lars 64 Nov  4 21:43 0 -> /home/lars/somefile.txt
lrwx------. 1 lars lars 64 Nov  4 21:43 1 -> /dev/pts/5
lrwx------. 1 lars lars 64 Nov  4 21:43 2 -> /dev/pts/5

То же самое работает при перенаправлении stdout в файл. Если я бегу:

sleep inf > somefile.txt

Тогда я вижу:

$ ls -l /proc/23456/fd
lrwx------. 1 lars lars 64 Nov  4 21:45 0 -> /dev/pts/5
l-wx------. 1 lars lars 64 Nov  4 21:45 1 -> /home/lars/somefile.txt
lrwx------. 1 lars lars 64 Nov  4 21:45 2 -> /dev/pts/5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...