Команда 'logcat' , по-видимому, предназначена для разработки под Android - это может объяснить странное расположение команды.
Ключевая операция, которую необходимо исправить, - убедиться, что вы закрываетеваш текущий стандартный ввод (терминал) и откройте /dev/null/
для устройства ввода:
close(0);
if ((fd = open("/dev/null", O_RDONLY)) != 0)
...error - failed to open /dev/null!
Это означает, что ваш демонизированный дочерний процесс не будет ничего читать с терминала.
Я думаю, что вы хотите сделать следующее:
- Запустить вашу программу запуска из командной строки, которая будет иметь стандартный ввод, стандартный вывод и стандартную ошибку, связанную с «терминалом».
- Внутри вашей программы вы хотите заменить стандартный ввод так, чтобы он исходил из
/dev/null
. - Вы хотите оставить стандартный вывод в покое - вы хотите, чтобы
logcat
записывал в текущий стандартный вывод. - Возможно, вы также хотите оставить стандартную ошибку в покое.
В какой-то момент процедуры вы правильно выполняете демонизация (заимствуя ссылку from @ bstpierre's answer), убедившись, что терминал, к которому вы подключены, не является вашим управляющим терминалом, поэтому прерывания и зависания, отправляемые на терминал, не влияют на вашего демона.Сантехника проще, чем вы настроили - вы должны работать со стандартным вводом и оставить стандартный вывод и стандартную ошибку без изменений (вместо изменения выходов и оставления входа без изменений).
Теперь вы можете захотетьвывод перейти к /dev/console
;если это так, то разумно пересмотреть код, чтобы открыть /dev/console
.Однако не стоит возвращаться к /dev/null
, если вы не можете открыть /dev/console
;ваша программа должна сообщить об ошибке и об ошибке (потому что нет смысла записывать logcat в /dev/null
!).Убедитесь, что вы открываете консоль с флагом O_NOCTTY
, чтобы она не стала управляющим терминалом для демона.
Последний комментарий, который я хотел бы сделать:
- Вы?Вы уверены, что хотите, чтобы случайный текст появлялся на вашем терминале или консоли, когда он используется для других целей?
Мне не очень нравится, когда это происходит.
См.также: SO 958249