检查已运行的进程是否在 Linux 上重定向了标准输入?

rph*_*rph 3 linux terminal process

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

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

app < input1.txt

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

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

我也尝试过查看top以及 in/proc/PID/*但没有找到任何东西。

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

lar*_*sks 6

您应该能够查看/proc/<PID>/fd这些信息。例如,如果我重定向标准输入以获取文件中的命令:

sleep inf < somefile.txt
Run Code Online (Sandbox Code Playgroud)

然后我在对应的目录中填写find /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
Run Code Online (Sandbox Code Playgroud)

将标准输出重定向到文件时,同样的事情也有效。如果我运行:

sleep inf > somefile.txt
Run Code Online (Sandbox Code Playgroud)

然后我看到:

$ 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
Run Code Online (Sandbox Code Playgroud)