Почему некоторые программы возвращаются при вызове с терминала, а другие просто возвращаются только с включением «& amp;»

После нескольких месяцев попыток исправить эту проблему, установка этого backport работала для меня, используя предоставленные инструкции.

Ссылка: https://bugs.launchpad.net/ubuntu/+source/linux/+ bug / 1160188

Инструкции:

Откройте Dash и найдите терминал и откройте его. wget https://www.kernel.org/pub/linux/kernel/projects/backports/2013 /06/18/backports-20130618.tar.xz tar xvf backports-20130618.tar.xz cd backports-20130618 make defconfig-ath9k make sudo make install (вставьте свой пароль, когда sudo спрашивает об этом). Готов! Перезагрузите компьютер.

Новые драйверы должны быть использованы, но обратите внимание, что вам нужно будет снова выполнить шаги 4-7, если обновление ядра Linux появляется как обновление для системы безопасности или иначе.

1
задан 14 June 2015 в 18:10

2 ответа

Все программы можно вызвать без &. [F2] является полностью необязательным. Все, что он делает, это отправить процесс на задний план, чтобы вы могли продолжать использовать свой терминал.

Без этого, если вы запустите процесс с терминала, вам нужно будет подождать, пока этот процесс не завершится (или не будет закрыт), прежде чем сможет продолжить использовать ваш терминал. Поэтому часто запускаются программы как command &, чтобы отправить их на задний план и продолжать работать в одном и том же терминале.

Подробнее о различных операциях оболочки, таких как & и о том, что они делают, см. Здесь.

9
ответ дан 23 May 2018 в 19:50
  • 1
    Да, но, как и в предыдущем ответе, программа не нужно отправлять на задний план, если она отсоединена от терминала. – Sharan Duggirala 14 June 2015 в 13:51
  • 2
    @SharanDuggirala добавляет & (или Ctrl + Z и bg) или отделяет, используя at, nohup или disown, все имеют тот же поверхностный эффект: они возвращают ваш терминал вам, в фоновом режиме. Каждый подход имеет разные преимущества, но ни один из них не требуется, и все отправляют процесс на задний план. – terdon♦ 14 June 2015 в 13:57
  • 3
    Но спасибо в любом случае, я искал операторов для использования в терминале – Sharan Duggirala 14 June 2015 в 14:41

Программа очень проста для себя в фоновом режиме. Код, используемый для этого, может быть таким же простым, как это:

if (fork() > 0) _exit(0);

Но по умолчанию это создаст несколько недостатков. Например, вы больше не можете обертывать программу в скрипт, который что-то делает с завершением программы. И запись вывода на терминал из фонового процесса может оказаться довольно грязной, вывод терминала из фоновых процессов может быть отключен, но затем фоновый процесс будет заморожен, как только он попытается произвести вывод.

По моему опыту Skype и Firefox не ставят себя в фоновом режиме. Они делают что-то другое.

Когда вы запускаете одну из этих программ, они будут проверять, есть ли уже запущенный экземпляр программы. Если есть исполняемый экземпляр, новый экземпляр отправит сообщение исполняемому экземпляру с параметром, который вы ему только что дали, а затем закройте.

Эффект от этого заключается в том, что уже запущенный экземпляр что-то делает, и вы получите свое приглашение назад.

3
ответ дан 23 May 2018 в 19:50
  • 1
    +1. Кроме того, вы можете обычно указывать этим программам не искать другие экземпляры самих себя, например. с skype --secondary или firefox --new-instance. Если вы это сделаете, не используя &, они должны всегда блокировать терминал, пока вы не покинете их. – Ilmari Karonen 15 June 2015 в 12:04

Другие вопросы по тегам:

Похожие вопросы: