如何在 sh 文件正在运行但已被删除时读取它?

如何在 sh 文件正在运行但已被删除时读取它?

在一次采访中他们问了我这个问题。

有一个 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。我长大了:)catcptail

相关内容