В продолжение этого вопроса я хотел бы знать, куда перенаправляются STDOUT и STDERR программы, в которой я запускал disown -h .
1 ответ
disown не меняет программы STDOUT/ERR. Они по-прежнему будут отправляться туда, куда вы их перенаправили (используя > и т.д.). Если вы не перенаправили их, они будут продолжать входить в терминал, с которого вы запустили программу (до тех пор, пока вы не закроете этот терминал, в этом случае они будут удалены).
Чтобы проиллюстрировать это, запустите это в терминале:
bash -c 'while true; do sleep 1; echo hi; done' &
Это будет печатать "привет" каждую секунду (и вас ужасно раздражать ;-)). Если вы disown от программы после запуска, "привет" просто продолжится. Вам нужно найти PID оболочки (используя, например, ps) и убить его, чтобы он остановился.
Редактировать:
Основываясь на комментариях, возможно, что вы действительно хотите сделать, это восстановить вывод программы после того, как вы disown нее и закрыли терминал, в котором она работала. Это объясняется в этом вопросе: после-удаленный удаленный nohup с tcsh (благодаря quackote quackote).
