як отримати вихід запущеного процесу nohup, якщо nohup.out буде видалений


2

У мене на вікні FreeBSD 8.4 працює процес nohup. Спочатку я дивився на вихідні повідомлення з консолі nohup

tail -f nohup.out

Але я випадково видалив файл nohup.out. Як я можу зараз отримати доступ до повідомлень консолі?

Відповіді:


1

Так, хоча файл все ще існує до тих пір, поки процес зберігає його відкритим, оскільки він був unlink-ed, він більше не доступний.

Якщо вам потрібно продовжувати бачити повідомлення під час їх створення, ви можете ввімкнути ktraceпроцес, який генерує їх:

% ktrace -p PID
% kdump -l

Вище буде перераховано всі системні виклики, здійснені процесом, однак вони не просто записуються в, stdoutі stderrтому це може бути трохи непосильним і / або вимагати додаткової фільтрації, щоб отримати лише те, що ви хочете бачити.

Якщо ви хочете скопіювати файл, ви можете скористатися однією з утиліт загального призначення, наприклад, tsk_recoverз порту sysutils / sleuthkit . Звичайна мудрість не писати у файлову систему, що містить випадково видалені файли, які ви хочете відновити, не застосовується, оскільки у вас все ще залишається процес збереження відкритого файлу.

Однак відновлення створить копію видаленого файлу - нічого, написаного до нього тим самим процесом пізніше, у копії не буде.

Вибачте, я не можу придумати нічого іншого ... На Solaris я одного разу зміг відновити видалений файл, який все ще був відкритий процесом, зайшовши /proc/PID/fd/..., але profs на FreeBSD не пропонує такої функціональності ...

Згідно з цією відповіддю , /proc/PID/fdметод також працював би на Linux, однак лінійні програми FreeBSD також не пропонують цю функцію. Сором, справді ...

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.