it-roy-ru.com

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

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

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

Perl script.pl > output.log &

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

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

64
Dude

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

От man bash:

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

110
mgarciaisaia

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


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

10
Zack S

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

sh my_script.sh &

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

Nohup sh my_script.sh &

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

4
Timothy Jannace

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

0
Kaustubh Kislay