![& для запуска команды в фоновом режиме](https://rvso.com/image/154486/%26%20%D0%B4%D0%BB%D1%8F%20%D0%B7%D0%B0%D0%BF%D1%83%D1%81%D0%BA%D0%B0%20%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%8B%20%D0%B2%20%D1%84%D0%BE%D0%BD%D0%BE%D0%B2%D0%BE%D0%BC%20%D1%80%D0%B5%D0%B6%D0%B8%D0%BC%D0%B5%20.png)
когда я бегу
$ ls -R / &
хотя &
(что предполагает перевод процесса в фоновый режим) мне в конечном итоге приходится просматривать весь список моей системы. Нажатие CTRL+C или CTRL+Z не помогает. Что я делаю не так?
решение1
При запуске ls -R /
в фоновом режиме команда немедленно запускается и управление возвращается вызывающей оболочке (вашей интерактивной оболочке). Однако стандартный поток вывода и стандартный поток ошибок ls
по-прежнему подключены к терминалу, поэтому вы видите вывод команды в терминале.
В комментарияхвы задаете дополнительный вопрос, который показывает, что вы знаете, что можете перенаправить вывод команды на , чтобы /dev/null
избежать его потоковой передачи на терминал:
ls -R / >/dev/null 2>&1 &
Следующий вопрос: «Почему он отображается, Exit 1
когда я проверяю статус задания с помощью jobs -l
.
Вы получаете ненулевой статус выхода из , ls
потому что он не был полностью успешно запущен. Это не так, потому что вы попытались сделать рекурсивный листинг всех файлов во всей системе, и, предположительно, некоторые из каталогов в ваших системах не доступны для чтения пользователю, от имени которого вы запустили команду. Если бы вы не перенаправили стандартный поток ошибок /dev/null
(удалив 2>&1
из командной строки), вы, вероятно, увидели бы ошибки в терминале.