检查是否已经在运行的进程在Linux上重定向了stdin?

时间:2018-11-03 19:54:06

标签: linux terminal process

鉴于进程的PID,是否有办法找出该进程是否将stdin或stdout重定向了?

我有一个从标准输入中读取的应用程序。为了方便起见,我通常使用从文件重定向的stdin启动该应用程序,如下所示:

app < input1.txt

问题是有时我启动该应用程序而忘记了我使用的输入文件。有没有办法找出哪个文件已用于重定向标准输入?

使用ps -aux | grep PID允许我查看所使用的命令行。但是没有给我有关stdinstdout的任何信息。

我还尝试查看top/proc/PID/*,但没有发现任何东西。

我正在使用CentOS 7,如果有帮助的话。

1 个答案:

答案 0 :(得分:1)

您应该只能查看/proc/<PID>/fd以获得此信息。例如,如果我从文件重定向标准输入命令:

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