Поэтому я запустил команду find / .bash_profile чтобы проверить, существует ли она где-нибудь на моем Mac, прежде чем я ее создаю. Поиск по всему компьютеру, очевидно, занимает минуту, поэтому я хотел запустить его в фоновом режиме (что я раньше не пытался сделать), поэтому я добавил & в конец, например так: find / .bash_profile &

Однако, вместо того, чтобы запускать его в фоновом режиме и позволять мне делать другие вещи, это просто сделало процесс непрерывным! Он продолжал работать на переднем плане, но Ctrl+C больше не имел никакого эффекта; его можно было остановить, только полностью закрыв экземпляр терминала.

Что мне здесь не хватает?

3 ответа3

3

Вы уверены, что процесс был на переднем плане?  То, что он выводил вывод в терминал, не означает, что он был на переднем плане.

Если у вас есть команда, которая производит вывод, и вы хотите запустить ее в фоновом режиме, вы должны перенаправить вывод, как:

find / -name .bash_profile > find_results &

Для фонового процесса является нормальным невосприимчивость к прерываниям (Ctrl+C), поэтому вы можете прерывать работу на переднем плане, не мешая фоновым заданиям.  (Обратите внимание, что вы ошиблись командой.)

3

Это действительно работает в фоновом режиме, и вы можете делать другие вещи, но каждый раз, когда он выводит что-то, он выводит на ваш текущий терминал.

Предложение:find / -name .bash_profile >my_result.txt 2>/dev/null &

Это сохраняет выходные данные в файл и удаляет все ошибки (например, ошибка «Отказано в доступе»). Вы можете проверить состояние либо заглядывать в выходном файле tail my_result.txt или набрав jobs

Если вам нужно убить задание, введите kill %1 где 1 - номер задания в jobs .

1

Вы наткнулись на мою любимую мозоль с find . Попробуйте использовать опцию -print следующим образом

find / -name '.bash_profile' -print > some_file

Вы также можете столкнуться с проблемой, не экранируя или не заключая в кавычки точку в имени файла. find поддерживает синтаксис RegEx, так что точка в имени файла может быть неверно истолкована. Любой из приведенных ниже примеров должен решить эту проблему

find / -name 'some_file.txt' ...

или же

find / -name some_file\.txt ...

Одинарные кавычки более гибкие, потому что вам не нужно экранировать каждый управляющий символ, и вы можете легче заключать в символы, такие как @ или /

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .