在一次采访中他们问了我这个问题。
有一个 sh 文件已在运行,但自开始执行后已被删除。
他们希望我找到该进程并读取该文件。
我设法找到了这个过程
ps -ef | grep test.sh
并尝试使用
cat /proc/PID/cmdline test.sh
但它说
no such file or directory
我不知道下一步该做什么所以我不得不跳过这一步。
也许这是一个简单的问题,但对我来说这确实是一个好问题,我真的想知道答案。你们能帮忙吗?
答案1
tail -c +0 -f /proc/{pid}/fd/{fd} > /tmp/file
其中 {pid} 是进程的 ID,/tmp/file
将包含其内容。如果要保留它,请使用其他位置和名称。
- {pid} 是进程的 id。
- {fd} 是文件描述符。
lsof
应该显示 fd。lsof
很可能也会在线上显示“已删除”,所以你grep
也可以这样做。lsof -nP +L1
将列出所有链接少于 1 个的文件,已删除的文件将有 0 个。添加一个| grep {pid}
以仅搜索你的 PID。 - 从甜点:
lsof -p 22664 | sed -E '$!d;s/.*\s([0-9]+)[a-z]\s.*/\1/'
只获取 fd。 - 来自评论:您也可以使用或
less
。我长大了:)cat
cp
tail