Я системный администратор, и меня попросили запустить сценарий linux для очистки системы.
Команда такая:
perl script.pl > output.log &
Итак, эта команда заканчивается &
знаком, есть ли в ней какое-то особое значение?
У меня есть базовые знания о оболочке, но я никогда раньше такого не видел.
&
и&&
:&
выполняет первую команду в фоновом режиме;&&
выполняет первую команду и условно переходит ко второй, если завершается успешно.Ответы:
&
Делает команду работать в фоновом режиме.Откуда
man bash
:источник
Кроме того, вы можете использовать знак «&» для запуска множества процессов через одно (1) соединение ssh, чтобы сохранить минимальное количество терминалов. Например, у меня есть один процесс, который прослушивает сообщения для извлечения файлов, второй процесс прослушивает сообщения для загрузки файлов: с помощью символа «&» я могу запускать обе службы в одном терминале через одно ssh-соединение с моим сервером. .
***** Я только что понял, что эти процессы, запущенные через "&", также "останутся в живых" после закрытия сеанса ssh! довольно аккуратно и полезно, если ваше соединение с сервером прервано **
источник
nohup
также будет поддерживать процессы.Если не указано иное, команды выходят на первый план. У вас есть только один процесс «переднего плана», работающий в одном сеансе оболочки. Символ & указывает командам на выполнение в фоновом режиме и немедленно возвращает в командную строку дополнительные команды.
Фоновый процесс не будет работать после закрытия сеанса оболочки. SIGHUP завершает все запущенные процессы. В любом случае по умолчанию. Если ваша команда выполняется долго или работает бесконечно (например, микросервис), вам необходимо настроить ее с помощью nohup, чтобы она продолжала работать после отключения от сеанса:
РЕДАКТИРОВАТЬ: кажется, что есть серая область относительно закрытия фоновых процессов при использовании &. Просто имейте в виду, что оболочка может закрыть ваш процесс в зависимости от вашей ОС и локальных конфигураций (особенно в CENTOS / RHEL): https://serverfault.com/a/117157 .
источник
Я не знаю наверняка, но я сейчас читаю книгу и понимаю, что программе нужно обрабатывать свой сигнал (как когда я нажимаю
CTRL-C
). Теперь программа можетSIG_IGN
игнорировать все сигналы илиSIG_DFL
для восстановления действия по умолчанию.Теперь, если вы это сделаете,
$ command &
этот процесс, работающий в фоновом режиме, просто игнорирует все возникающие сигналы. Для процессов переднего плана эти сигналы не игнорируются.источник