Знак & отправил команду в фон. В этом шаге — что оболочка напечатала после запуска и где теперь искать команду.
Обычно оболочка ждёт, пока команда закончится, и только потом печатает приглашение: команда работает на переднем плане. С & в конце строки команда уходит в фон — оболочка запускает её и сразу ждёт следующую.
Команду, которую оболочка запустила и за которой следит, называют заданием. В строке [1] 1028 первое число — номер задания, второе — PID процесса. Номер задания действует в этой оболочке: у каждой оболочки своя таблица заданий.
jobs печатает задания этой оболочки: номер, состояние и команду. Running значит, что задание работает. jobs -l добавляет к каждому заданию PID, а PID последней фоновой команды оболочка хранит в переменной $!:
Задания живут вместе со своей оболочкой. Если оборвётся подключение к серверу, оболочка получит сигнал отбоя и разошлёт его своим заданиям — обычно они завершаются. Работу, которая должна пережить выход, запускают службой.
В том же терминале ты запустил новую оболочку командой bash и выполнил в ней jobs. Что он покажет про sleep 600 &?
-
Таблица заданий своя у каждой оболочки, и у новой она пуста. Процесс sleep 600 при этом виден в
ps. -
Новая оболочка задание не трогает: sleep 600 продолжает работать,
psпокажет его в состоянии S. -
jobsне сообщает об ошибке: в новой оболочке заданий нет, и он печатает пустую строку.
У каждой оболочки своя таблица заданий: новая оболочка не знает о sleep 600 &, хотя процесс работает и виден в ps. Вернуться в первую оболочку — exit.
Главное в шаге
-
&в конце строки запускает команду в фоне, и приглашение возвращается сразу. -
[1] 1028— номер задания и PID процесса; задания этой оболочки печатаетjobs, с PID —jobs -l. -
Таблица заданий своя у каждой оболочки, а процессы всей машины видны через
ps.