Есть ли способ восстановить / восстановить nohup, чтобы увидеть вывод в консоли?

StackOverflow https://stackoverflow.com/questions/4265899

Вопрос

Я знаю, что шансы чрезвычайно низкие, но есть ли способ увидеть, какой процесс NOHUP-ED был недавно выводит?

У меня все еще есть этот процесс открытым, но я запустил его с перенаправлением всех выходов на / dev / null.

Так есть ли способ восстановить такой процесс обратно в консоль, или это безнадежно :(

Ваше здоровье

Это было полезно?

Решение

Есть способ, но это не прямо вперед, трюк - использовать DUP2 и зависит от того факта, что ваша программа связана с libc (которую все приложения C / C ++ будут, но приложение Java не будет, например, Несомненно

  1. Прикрепите к вашему процессу, используя GDB
  2. Запустите следующее в приглашении GDB, чтобы перенаправить stdout to / tmp / newfile

    $ Print DUP2 (Open ("/ tmp / newfile", 0), 1)

  3. Запустите следующее, чтобы перенаправить STDERR в / TMP / NewFile

    $ Print DUP2 (Open («/ TMP / NewFile», 0), 2)

  4. Отсоедините GDB из вашего процесса и сделали

какой ДУП2. это

Дублируйте дескриптор файла. Это означает, что оба STDOUT / STDERR (1 и 2), так и новый дескриптор файла, возвращаемый с Open, можно использовать взаимозаменяемый, который приведет к тому, что все вывод переходит на STDOUT и STDERR, чтобы перейти к открытому файлу.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top