Есть ли способ восстановить / восстановить nohup, чтобы увидеть вывод в консоли? - PullRequest
8 голосов
/ 24 ноября 2010

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

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

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

Cheers

1 Ответ

8 голосов
/ 24 ноября 2010

Есть способ, но он не прост, хитрость в том, чтобы использовать dup2 и зависит от того факта, что ваша программа связана с libc (что было бы во всех приложениях c / c ++, но не в java-приложениибыть, например)

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

    $print dup2 (open ("/ tmp / newfile", 0), 1)

  3. выполните следующее, чтобы перенаправить stderr в / tmp / newfile

    $ print dup2 (open ("/ tmp / newfile", 0), 2)

  4. отсоедините gdb от вашего процесса и вы сделали

Что делает dup2

дублировать дескриптор файла. Это означает, что как stdout / stderr (1 и 2), так и новый дескриптор файла, возвращаемый из open, можно использовать взаимозаменяемо, что приведет к тому, что весь вывод будет идти в stdout, а stderr - вфайл, который вы открыли.

...