Что означает «&» в конце команды linux?


99

Я системный администратор, и меня попросили запустить сценарий linux для очистки системы.

Команда такая:

perl script.pl > output.log &

Итак, эта команда заканчивается &знаком, есть ли в ней какое-то особое значение?

У меня есть базовые знания о оболочке, но я никогда раньше такого не видел.


извини, что плохо, я знал о таких элементарных вещах
Чувак

3
Если вы находитесь на этой странице и ищете разницу между &и &&: &выполняет первую команду в фоновом режиме; &&выполняет первую команду и условно переходит ко второй, если завершается успешно.
Дэвид Бодоу

Ответы:


151

&Делает команду работать в фоновом режиме.

Откуда man bash:

Если команда завершается оператором управления & , оболочка выполняет команду в фоновом режиме в подоболочке. Оболочка не ждет завершения команды, и статус возврата равен 0.


13

Кроме того, вы можете использовать знак «&» для запуска множества процессов через одно (1) соединение ssh, чтобы сохранить минимальное количество терминалов. Например, у меня есть один процесс, который прослушивает сообщения для извлечения файлов, второй процесс прослушивает сообщения для загрузки файлов: с помощью символа «&» я могу запускать обе службы в одном терминале через одно ssh-соединение с моим сервером. .


***** Я только что понял, что эти процессы, запущенные через "&", также "останутся в живых" после закрытия сеанса ssh! довольно аккуратно и полезно, если ваше соединение с сервером прервано **


nohupтакже будет поддерживать процессы.
Джерри Чин

2
с помощью & мы также можем получить PID, чтобы мы могли завершить процесс, если захотим, а также мы можем проверить статус этого процесса
Дхавал Соланки

13

Если не указано иное, команды выходят на первый план. У вас есть только один процесс «переднего плана», работающий в одном сеансе оболочки. Символ & указывает командам на выполнение в фоновом режиме и немедленно возвращает в командную строку дополнительные команды.

sh my_script.sh &

Фоновый процесс не будет работать после закрытия сеанса оболочки. SIGHUP завершает все запущенные процессы. В любом случае по умолчанию. Если ваша команда выполняется долго или работает бесконечно (например, микросервис), вам необходимо настроить ее с помощью nohup, чтобы она продолжала работать после отключения от сеанса:

nohup sh my_script.sh &

РЕДАКТИРОВАТЬ: кажется, что есть серая область относительно закрытия фоновых процессов при использовании &. Просто имейте в виду, что оболочка может закрыть ваш процесс в зависимости от вашей ОС и локальных конфигураций (особенно в CENTOS / RHEL): https://serverfault.com/a/117157 .


3

Я не знаю наверняка, но я сейчас читаю книгу и понимаю, что программе нужно обрабатывать свой сигнал (как когда я нажимаю CTRL-C). Теперь программа может SIG_IGNигнорировать все сигналы илиSIG_DFL для восстановления действия по умолчанию.

Теперь, если вы это сделаете, $ command &этот процесс, работающий в фоновом режиме, просто игнорирует все возникающие сигналы. Для процессов переднего плана эти сигналы не игнорируются.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.