1

У меня есть одно сомнение в процессе Linux

случай 1:(здесь нет открытого Firefox)

предположим, что если я открою firefox из командного терминала с помощью этой команды firefox & то процесс начнется в фоновом режиме.

Теперь, если я выйду из Терминала Firefox, также выйдите

Случай 2:(здесь один Firefox уже открыт)

Теперь, если я открою firefox из командного терминала с помощью этой команды firefox & тогда процесс начнется в фоновом режиме.

Но теперь, если я выйду из терминала, то ничего не выйдет на второй Firefox (открытый Терминалом), почему?

В случае 1 он закроется, что происходит в случае 2?

2 ответа2

3

В случае 1 вы запускаете совершенно новый процесс firefox, "привязанный" к терминалу, убивая терминал, затем последовательно убивает все связанные процессы

В случае 2, даже если вы запускаете FF, вызывая & (в фоновом режиме), FF уже имеет открытый главный процесс, и новое окно будет открыто как "дочерний" для другого, так что привязано к этому, а не к терминалу. Следовательно, уничтожение терминала по-прежнему уничтожает все связанные процессы, а не ff, который не является "его" дочерним элементом.

3

В случае 2 происходит почти то же самое. Разница в том, что firefox является приложением с одним экземпляром, и если при запуске он обнаруживает, что его копия работает:

  1. Отправляет аргументы командной строки для запуска экземпляра с помощью IPC
  2. Выходы

Это упрощенный алгоритм, поскольку некоторые аргументы могут привести к другому поведению, но в большинстве случаев все происходит так, как указано выше.

Таким образом, во втором случае фоновый процесс существует менее секунды, в то время как ранее запущенный экземпляр firefox продолжает работать независимо от терминала.

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