1

У меня есть 2 вопроса о запуске процессов в фоновом режиме:

  1. Почему запуск процесса в фоновом режиме выглядит так:

    ./my_program &

    my_program , конечно, есть набор разрешений exe) не заставляет bash печатать командную строку, как любые другие команды? Он просто оставил пустую новую строку с мигающим курсором.

  2. Когда я запускаю следующие новые процессы в фоновом режиме, bash отображает sth. как это:

    ./my_program & [30] 1439 [27] Done ./my_program [28] Done ./my_program [29] Done ./my_program

    Означает ли это, что запуск других дополнительных процессов в фоновом режиме заставляет систему отображать информацию о процессах предварительного просмотра ([27], [28], [29] строки) до тех пор, пока в данный момент запущено) ([30] строка)?

1 ответ1

0
  1. Этого не должно быть. Когда вы запускаете команду в фоновом режиме, bash обычно просто печатает номер задания и pid (см. Ниже), а затем возвращается в командную строку.

    Единственная причина, которую я знаю об этом, заставляет bash оставить вас с новой строкой в этой ситуации, если ваша команда на самом деле не существует, так как она каким-то образом выдаст сообщение об ошибке после печати PS1:

    $ nonexistant_command &
    [1] 13856
    $
    nonexistant_command: command not found
    <empty line with blinking cursor here>
    

    Какой бы ни была причина, нажатие клавиши ввода в этой пустой строке должно напечатать новую строку с вашим обычным приглашением (и, возможно, сообщением о том, что задание, которое вы только что создали, завершено; см. Ниже).

  2. Дополнительный вывод, который вы видите - 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .