Запуск процесса в фоновом режиме

Запуск процесса в фоновом режиме

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

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

    ./my_program &

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

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

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

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

решение1

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

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

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

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

  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

Связанный контент