如果 nohup.out 被删除,如何获取正在运行的 nohup 进程的输出

如果 nohup.out 被删除,如何获取正在运行的 nohup 进程的输出

我的 FreeBSD 8.4 机器上运行着一个 nohup 进程。最初,我查看了 nohup 控制台消息通过

tail -f nohup.out

但是我不小心删除了 nohup.out 文件。我现在该如何访问控制台消息?

答案1

是的,尽管只要进程保持打开状态该文件就会仍然存在,但是由于它已被unlink-ed,因此不再可访问。

如果您需要在消息生成时继续查看它们,您可以ktrace在生成这些消息的进程上启用它们:

% ktrace -p PID
% kdump -l

上面将列出全部但是,进程所进行的系统调用不仅仅是写入stdoutstderr,因此可能会有点不知所措和/或需要额外的过滤才能获得您希望看到的内容。

如果你想要该文件的副本,你可以使用其中一个通用实用程序,tsk_recover例如sysutils/sleuthkit端口。通常的做法是不写入包含意外删除的文件(您希望恢复)的文件系统,但这并不适用,因为您仍然有一个进程保持文件打开。

然而,复苏将创造复制已删除文件 - 稍后由同一进程写入该文件的任何内容都不会出现在副本中。

抱歉,我想不出其他方法了...在 Solaris 上,我曾经能够通过进入来恢复已删除的、仍由进程打开的文件/proc/PID/fd/...,但 FreeBSD 上的 procfs 不提供此类功能...

根据这个答案,该/proc/PID/fd方法也适用于 Linux,但 FreeBSD 的 linprocfs 也不提供该功能。真可惜……

相关内容