获取正在运行的进程的输出重定向部分

获取正在运行的进程的输出重定向部分

有时我运行作业时,我会忘记将输出重定向到哪些输出文件。如何获取运行作业时使用的完整命令,包括输出重定向部分?

例如,当我跑步时

nohup python3 -c $'from time import sleep;\nfor i in range(100): print(i); sleep(1)' > .test.txt &

它应该打印一些东西.test.txt并运行 100 秒,然后运行ps -fp <PID>或检查/proc/<PID>/cmdline,我只得到

python3 -c from time import sleep; for i in range(100): print(i); sleep(1)

我已经尝试过一些解决方案如何将命令行参数传递给 unix/linux 系统上正在运行的进程?,但我不认为我的命令被截断。

我注意到,如果我运行命令的 shell 在作业完成时仍然打开,它会显示完整路径,例如

[1]+  Done                    nohup python3 -c 'from time import sleep;
for i in range(100): print(i); sleep(1)' > .test.txt

此信息仅存储在运行作业的 shell 中吗?

编辑:@muru 我刚刚意识到毕竟history确实给了我我的命令;谢谢。

答案1

如果您有正在运行的进程的 pid,那么ls -l /proc/${pid}/fd将显示 stdout (fd 1) 和 stderr (fd 2) 的写入位置。

答案2

单个“>”将覆盖文件,尝试使用附加到文件末尾的“>>”。

[admin@srv1 ~]$ for x in $(seq 1 100); do echo $x >> test.txt; done
[admin@srv1 ~]$ head -n 25 test.txt
1
2
...                                                                                                                                                                                                    

相关内容