Назад | Перейти на главную страницу

Могу ли я восстановить процесс nano с предыдущего терминала?

В моей системе произошел сбой, когда я был в нано-сеансе с несохраненными изменениями.

Когда я снова вхожу в систему через SSH, я вижу, что процесс nano все еще работает, когда я выполняю ps.

davidparks21@devdb1:/opt/frugg_batch$ ps -ef | grep nano
1001     31714 29481  0 18:32 pts/0    00:00:00 nano frugg_batch_processing
1001     31905 31759  0 19:16 pts/1    00:00:00 grep --color=auto nano
davidparks21@devdb1:/opt/frugg_batch$

Есть ли способ вернуть под свой контроль процесс nano в новом терминале?

Или как-нибудь заставить его сохранить удаленно (с моего нового терминала)?

Читая справочную страницу nano и выполняя поиск, я обнаружил:

В некоторых случаях nano попытается сбросить буфер в аварийный файл. Это произойдет в основном, если nano получит сигнал SIGHUP или SIGTERM или исчерпает память. Он запишет буфер в файл с именем nano.save, если у буфера еще не было имени, или добавит суффикс «.save» к текущему имени файла. Если аварийный файл с таким именем уже существует в текущем каталоге, он добавит «.save» плюс число (например, «.save.1») к текущему имени файла, чтобы сделать его уникальным. В многобуферном режиме nano запишет все открытые буферы в соответствующие аварийные файлы.

Так что тебе, возможно, стоит уже такой файл ждет вас где-нибудь в вашей системе.

find /likely/path -mtime -1 -print | egrep -i '\.save$|\.save\.[1-90]*$'

(/ вероятно / путь - это сначала место, откуда вы запустили nano, затем другие подобные «возможные» места, а затем в крайнем случае: / (конечно, запустите эту последнюю команду find от имени пользователя root или ожидайте большого количества ошибок, которые вы могли бы перенаправить, используя перенаправление STDERR вашей оболочки)

-mtime -1 говорит «до 1 дня назад», вы можете изменить значение на -2 или -3, в зависимости от того, когда вы редактировали файл и когда читаете это.

Если nano еще не записал такой файл, вы можете попытаться отправить ему сигнал SIGHUP, чтобы заставить его сделать это (см.: http://en.wikipedia.org/wiki/Unix_signal#POSIX_signals )

А затем снова запустите поиск, чтобы найти этот файл ...

И, наконец, в крайнем случае, вы можете поиграть с grepping через / proc / kmem для частей текста, которые вы ищете, но это потребует некоторых мер предосторожности, чтобы очистить то, что он вам показывает, и может быть нетривиальным. или сначала поместите его в файл (размером с вашу память).

Так что, возможно, это не вариант для вас, но я просто отправил на ящик команду перезагрузки. Когда он вернулся в сеть, Viola- file.py.save был помещен в каталог.

Он действительно работает, как упоминал @Oliver Dulac, но в некоторых ситуациях вместо сброса буфера в файл Nano просто интерпретирует и продолжает ждать от пользовательской команды, но есть и другие варианты без перезагрузки:

pkill -SIGHUP -e nano
pkill -SIGTERM -e nano
pkill -SIGILL -e nano

но программа может игнорировать эти 3 сигнала выше, поэтому попробуйте их в указанном выше порядке, затем проверьте, был ли файл создан, и если он не работает, попробуйте тот же сигнал, что и при выполнении перезагрузки (который отправляется после SIGTERM)

pkill -SIGKILL -e nano

имейте в виду, что это сигналы для программы, те, что вверху, могут быть интерпретированы и проигнорированы запущенной программой, последней.

  • SIGHUP сообщает программе, что терминал, в котором она выполняла очень распространенную вещь через SSH
  • SIGTERM - это пользовательский сигнал, чтобы закрыть программу, но его можно игнорировать, если программе что-то нужно (например, следует ли сохранять буфер над файлом?)
  • SIGILL сообщает программе, что она выполняет что-то неправильное и ее следует закрыть, но она все еще может интерпретировать и игнорировать, как указано выше;
  • SIGKILL - последнее предупреждение, система скоро убьет программу, поэтому программа будет интерпретировать и пытаться лучше