
У меня 2 вопроса по запуску процессов в фоновом режиме:
Почему запуск процесса в фоновом режиме выглядит так:
./my_program &
(
my_program
конечно, с установленным разрешением exe) не заставляет bash печатать командную строку, как и любые другие команды? Он просто оставляет пустую новую строку с мигающим курсором.Когда я запускаю очередной новый процесс в фоновом режиме, bash отображает что-то вроде этого:
./my_program & [30] 1439 [27] Done ./my_program [28] Done ./my_program [29] Done ./my_program
означает ли это, что запуск дополнительных процессов в фоновом режиме заставляет систему отображать информацию о процессах предварительного просмотра (
[27], [28], [29]
строк) до тех пор, пока запущен текущий) ([30]
строк)?
решение1
Этого не должно происходить. Когда вы запускаете команду в фоновом режиме, bash обычно просто выводит номер задания и pid (см. ниже), а затем возвращается к командной строке.
Единственная известная мне причина, по которой bash оставляет новую строку в этой ситуации, — это если ваша команда на самом деле не существует, поскольку он каким-то образом выдаст сообщение об ошибке после печати PS1:
$ nonexistant_command & [1] 13856 $ nonexistant_command: command not found <empty line with blinking cursor here>
Какой бы ни была причина, нажатие Enter на этой пустой строке должно вывести новую строку с обычным приглашением (и, возможно, сообщением о том, что только что созданное вами задание завершено; см. ниже).
Дополнительный вывод, который вы видите, — это bash, сообщающий о текущих фоновых заданиях:
Во-первых, он сообщает вам текущий номер задания любого вновь созданного фонового процесса вместе с его pid, например:
$ some_command & [1] 1234
Это означает, что команда
some_command
теперь выполняется с pid 1234 как задание 1.После завершения фонового задания bash уведомит вас об этом при следующем выводе командной строки (независимо от того, запустили ли вы другой фоновый процесс, выполнили команду на переднем плане или просто нажали Enter при пустой командной строке), выведя сообщение следующего вида:
[1] Done some_command
Это означает, что работа под номером 1, которая выполнялась,
some_command
теперь завершена.Чтобы узнать, какие фоновые задания в данный момент отслеживает bash, можно использовать
jobs
встроенную функцию следующим образом:$ jobs [1] Running some_command & [2] Running some_other_command &
Чтобы вывести задание на передний план, вы можете использовать
fg
:$ fg 2 some_other_command
Для получения более подробной информации попробуйте
help jobs