鉴于进程的PID,是否有办法找出该进程是否将stdin或stdout重定向了?
我有一个从标准输入中读取的应用程序。为了方便起见,我通常使用从文件重定向的stdin启动该应用程序,如下所示:
app < input1.txt
问题是有时我启动该应用程序而忘记了我使用的输入文件。有没有办法找出哪个文件已用于重定向标准输入?
使用ps -aux | grep PID
允许我查看所使用的命令行。但是没有给我有关stdin
或stdout
的任何信息。
我还尝试查看top
和/proc/PID/*
,但没有发现任何东西。
我正在使用CentOS 7,如果有帮助的话。
答案 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