Как асинхронно запустить внешнюю программу от cli и отбросить его вывод?

Можно запустить chrooted Linux, например, Debian или openSUSE. Я ожидал бы, что 3G и Wi-Fi будут работать (так как они будут обработаны ядром Android). Проблемой обычно является видеокарта, которая является (afaik), обычно работал вокруг при помощи VNC для соединения с chroot средой.

3
19.01.2014, 11:05
2 ответа

Вы, вероятно, хотите отбросить любой вывод STDERR также. Можно сделать, обоим нравится так:

conky > /dev/null 2>&1 &

Этот оператор по существу говорит оболочке делать следующее:

  1. conky > /dev/null - перенаправьте весь стандартный вывод к/dev/null
  2. 2>&1 - Перенаправьте стандартную погрешность туда, где стандартный вывод в настоящее время указывает. Из-за предыдущего перенаправления Вы стандартный вывод указывает на/dev/null, таким образом, стандартная погрешность будет следовать.
  3. & - Выполните это в подоболочке (фон).
  4. Благодаря @alexis для указания, что мое описание для & не было довольно точно:

    (a) Каждая внешняя команда должна быть выполнена после (v) ветвление, не просто фоновые процессы. (b) Процессы Backgrounded не выполняются в подоболочке, но сразу выполняются после ветвления. Реальная разница, когда процесс является фоном, - то, что оболочка вызова сразу не ожидает (2) его (но печатает подсказку и ждет ввода данных пользователем).

Когда вывод перенаправления, Bash читает перенаправления в порядке, слева направо. Bash также рассматривает '&' как разделитель команды, который может использоваться где угодно''; обычно использовался бы. То, что Вы делали, говорило удар
  1. Выполненный носатый в фоновом режиме. Строго говоря, разветвите процесс и выполните его в подоболочке, асинхронно, и управлении возвратом терминала пользователю.
  2. Bash считает это новой командой - это совпадает с выполнением >/dev/null на подсказке ни с чем предшествующим перенаправлению. Ничего не происходит.
  3. Перенаправьте стандартную погрешность к/dev/null от несуществующей команды.
6
27.01.2020, 21:11
  • 1
    Хорошо я думал, что знал это. Я предполагаю, что должен иметь ошибочный 2> с >2... –  Adam Ryczkowski 19.01.2014, 11:00
  • 2
    Но все еще: это conky > /dev/null 2>&1 & все еще производит PID процесса икры, как произведено (например. [1] 2753). Там какой-либо путь состоит в том, чтобы избавиться от этого также? –  Adam Ryczkowski 19.01.2014, 11:01
  • 3
    Неважно у меня есть ответ: bash -c "conky >/dev/null 2>/dev/null &" –  Adam Ryczkowski 19.01.2014, 11:04
  • 4
    @tdk, Ваше описание & не довольно точно: (a) Каждая внешняя команда должен бежаться a (v)fork, не просто фоновые процессы. (b) процессы Backgrounded не выполняются в подоболочке, но сразу выполняются после ветвления. Реальная разница, когда процесс является фоном, - то, что оболочка вызова сразу не делает wait(2) для него (но печать подсказка и ждет ввода данных пользователем). Хороший вопрос –  alexis 19.01.2014, 16:58

Вместо

conky & >/dev/null 2>/dev/null

Использование:

conky >/dev/null 2>/dev/null &

Объяснение: Поскольку '&' служит разделителем операторов, первый - действительно две команды. Это работает как это:

conky &
>/dev/null 2>/dev/null

Первые выполнения команды, носатые в фоновом режиме, но, не перенаправляют ее вывод. Вторые перенаправления вывод на несуществующей команде. Для перенаправления вывода conky необходимо работать:

conky >/dev/null 2>/dev/null

Чтобы перенаправить вывод conky и также работать носатый в фоновом режиме, используйте:

conky >/dev/null 2>/dev/null &
2
27.01.2020, 21:11
  • 1
    О, это - хороший ответ.Спасибо! Команда conky >/dev/null 2>/dev/null & все еще производит PID порожденного процесса к терминалу (например. [1] 2574). Там шанс состоит в том, чтобы избавиться от этого также? –  Adam Ryczkowski 19.01.2014, 11:02
  • 2
    Для ответа на мой собственный вопрос я думаю, что нашел тот: bash -c "conky >/dev/null 2>/dev/null &" –  Adam Ryczkowski 19.01.2014, 11:04

Теги

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