Некоторые приложения графического интерфейса запускаются с помощью командной строки терминала.
Некоторые не делают этого, и они заставляют терминал ждать завершения приложения. ... и даже тогда некоторые из них не «освобождают» командную строку.
Таинственный амперсанд «& amp;» суффикс, кажется, заставляет терминал перевести процесс в фоновый режим ... (но я не уверен, что там происходит).
Есть ли способ запустить приложение через терминал, чтобы не было эффекта «зависания»? ... так же, как запускать что-то через F2.
Я хотел бы снова открыть командную строку, сразу (без чего-то еще в фоновом режиме и записи системного сообщения в терминал).
В случае с gedit я просто продолжаю открывать копию. До тех пор, пока у вас есть существующая копия, запуск gedit вызовов с терминала, а затем закрытие терминала не приведет к гибели gedit.
Что-то еще, что говорили другие люди, тоже будет работать. Я поклонник nohup ... Но если вам нужен терминал, вы можете отсоединиться, а затем снова подключиться, вы хотите посмотреть на screen.
Запустить его в терминале и затем запустите что-то, что продолжает толкать выход. Я использую сервер разработки Django, но irssi или даже watch uptime были бы хорошими примерами. Убейте терминал и запустите новый. Запустите screen -r и BOOM, вы вернулись.screen намного больше, чем это, и вы можете комбинировать его с byobu для лучшего использования терминала. Прочитайте.
В случае с gedit я просто продолжаю открывать копию. До тех пор, пока у вас есть существующая копия, запуск gedit вызовов с терминала, а затем закрытие терминала не приведет к гибели gedit.
Что-то еще, что говорили другие люди, тоже будет работать. Я поклонник nohup ... Но если вам нужен терминал, вы можете отсоединиться, а затем снова подключиться, вы хотите посмотреть на screen.
Запустить его в терминале и затем запустите что-то, что продолжает толкать выход. Я использую сервер разработки Django, но irssi или даже watch uptime были бы хорошими примерами. Убейте терминал и запустите новый. Запустите screen -r и BOOM, вы вернулись.screen намного больше, чем это, и вы можете комбинировать его с byobu для лучшего использования терминала. Прочитайте.
В случае с gedit я просто продолжаю открывать копию. До тех пор, пока у вас есть существующая копия, запуск gedit
вызывает от терминала, а затем закрытие терминала не приведет к уничтожению gedit.
Что-то еще, что говорили другие люди тоже будет работать. Я поклонник nohup
... Но если вам нужен терминал, вы можете отсоединиться, а затем снова подключиться, вы хотите посмотреть экран
.
irssi
или даже время безотказной работы
было бы хорошим примером. -r
и BOOM, вы снова вошли. экран
намного больше этого и вы можете комбинировать его с byobu
для лучшего использования терминала. Прочитайте.
В случае с gedit я просто продолжаю открывать копию. До тех пор, пока у вас есть существующая копия, запуск gedit
вызывает от терминала, а затем закрытие терминала не приведет к уничтожению gedit.
Что-то еще, что говорили другие люди тоже будет работать. Я поклонник nohup
... Но если вам нужен терминал, вы можете отсоединиться, а затем снова подключиться, вы хотите посмотреть экран
.
irssi
или даже время безотказной работы
было бы хорошим примером. -r
и BOOM, вы снова вошли. экран
намного больше этого и вы можете комбинировать его с byobu
для лучшего использования терминала. Прочитайте.
В случае с gedit я просто продолжаю открывать копию. До тех пор, пока у вас есть существующая копия, запуск gedit
вызывает от терминала, а затем закрытие терминала не приведет к уничтожению gedit.
Что-то еще, что говорили другие люди тоже будет работать. Я поклонник nohup
... Но если вам нужен терминал, вы можете отсоединиться, а затем снова подключиться, вы хотите посмотреть экран
.
irssi
или даже время безотказной работы
было бы хорошим примером. -r
и BOOM, вы снова вошли. экран
намного больше этого и вы можете комбинировать его с byobu
для лучшего использования терминала. Прочитайте.
В случае с gedit я просто продолжаю открывать копию. До тех пор, пока у вас есть существующая копия, запуск gedit
вызывает от терминала, а затем закрытие терминала не приведет к уничтожению gedit.
Что-то еще, что говорили другие люди тоже будет работать. Я поклонник nohup
... Но если вам нужен терминал, вы можете отсоединиться, а затем снова подключиться, вы хотите посмотреть экран
.
irssi
или даже время безотказной работы
было бы хорошим примером. -r
и BOOM, вы снова вошли. экран
намного больше этого и вы можете комбинировать его с byobu
для лучшего использования терминала. Прочитайте.
В случае с gedit я просто продолжаю открывать копию. До тех пор, пока у вас есть существующая копия, запуск gedit
вызывает от терминала, а затем закрытие терминала не приведет к уничтожению gedit.
Что-то еще, что говорили другие люди тоже будет работать. Я поклонник nohup
... Но если вам нужен терминал, вы можете отсоединиться, а затем снова подключиться, вы хотите посмотреть экран
.
irssi
или даже время безотказной работы
было бы хорошим примером. -r
и BOOM, вы снова вошли. экран
намного больше этого и вы можете комбинировать его с byobu
для лучшего использования терминала. Прочитайте.
В случае с gedit я просто продолжаю открывать копию. До тех пор, пока у вас есть существующая копия, запуск gedit
вызывает от терминала, а затем закрытие терминала не приведет к уничтожению gedit.
Что-то еще, что говорили другие люди тоже будет работать. Я поклонник nohup
... Но если вам нужен терминал, вы можете отсоединиться, а затем снова подключиться, вы хотите посмотреть экран
.
irssi
или даже время безотказной работы
было бы хорошим примером. -r
и BOOM, вы снова вошли. экран
намного больше этого и вы можете комбинировать его с byobu
для лучшего использования терминала. Прочитайте.
Он делает, и часто то, что вы хотите. Если вы забыли использовать & amp ;, вы можете приостановить программу с помощью ctrl-z, затем поместите ее в фоновом режиме с помощью команды bg и продолжите использовать эту оболочку.
Процесс 'stdin, stdout и stderr все еще подключены к терминалу; вы можете перенаправить их из / в / dev / null или любой другой файл (например, сохранить выходной журнал где-нибудь):
some-program </dev/null &>/dev/null &
# &>file is bash for 1>file 2>&1
Вы можете увидеть процесс на заданиях, вернуть его обратно переднего плана (команда fg) и отправить его сигналы (команда kill).
Некоторые графические программы будут отсоединены от терминала; если это так, когда вы запускаете команду «нормально», вы заметите, что она запускает графическую программу и «выйдет».
Вот короткий сценарий, вы можете разместить его в ~ / bin, который я назвал runbg:
#!/bin/bash
[ $# -eq 0 ] && { # $# is number of args
echo "$(basename $0): missing command" >&2
exit 1
}
prog="$(which "$1")" # see below
[ -z "$prog" ] && {
echo "$(basename $0): unknown command: $1" >&2
exit 1
}
shift # remove $1, now $prog, from args
tty -s && exec </dev/null # if stdin is a terminal, redirect from null
tty -s <&1 && exec >/dev/null # if stdout is a terminal, redirect to null
tty -s <&2 && exec 2>&1 # stderr to stdout (which might not be null)
"$prog" "$@" & # $@ is all args
Я просматриваю программу ($ prog) перед перенаправлением, чтобы можно было сообщить об ошибках в ее местонахождении. Запустите его как «runbg your-command args ...»; вы можете перенаправить stdout / err в файл, если вам нужно где-то сохранить выход.
За исключением переадресаций и обработки ошибок, это эквивалентно короткому скрипту .
Предположим, что gedit - это программа, которую вы хотите запустить отдельно (ака. «disown», «disentangle», «disouple»). Существуют разные способы в зависимости от того, что вы хотите сделать точно:
disown -h - это путь, если вы хотите сделать это с уже запущенной программой (т. е. если вы забыли nohup это). Сначала вам нужно остановить его, используя Ctrl + Z. Затем вы можете вставить в скобку с помощью bg [jobId] (например, bg 1). Вы получаете список рабочих заданий с их jobId с помощью jobs. После этого вы можете отделить его от терминала с помощью disown -h %[jobId]. Пример сеанса терминала:
confus@confusion:~$ gedit
^Z
[1]+ Stopped gedit
confus@confusion:~$ jobs
[1]+ Stopped gedit
confus@confusion:~$ bg 1
[1]+ gedit &
confus@confusion:~$ disown -h %1
confus@confusion:~$ exit
nohup не всегда присутствует на всех машинах. Если вы знаете, что хотите разделить заранее, вы будете использовать:
nohup gedit &
Возможно, вам захочется также перенаправить вывод оболочки, а ваша программа - на псевдо-источник, поэтому: nohup ./myprogram > foo.out 2> bar.err < /dev/null &. Вы хотите перенаправить вывод, чтобы он не был раздражен им или использовать его позже. Нулевой вход может помочь предотвратить hickups в ssh.
Вы можете добиться аналогичного эффекта с помощью
confus@confusion:~$ (geany 2>&1 /dev/null &)
Скобки открываются новая подоболочка для запуска gedit in. 2>&1 /dev/null перенаправляет вывод оболочки в никуда (подавление вывода). И & в конце ставит процесс в фоновом режиме.
Также терминальное мультиплексирование с использованием экрана или byobu. Вы в основном запускаете программу самостоятельно. Я действительно могу рекомендовать byobu по другим причинам. Ниже приведен список ярлыков boybu, которые могут пригодиться для ваших первых шагов:
Полезно:
F2 Создать новое окно F3 Перейти к следующему окну F4 Перейти к предыдущему Окно F6 Отсоедините от сеанса и выйдите из системы Shift-F6 Отсоедините от сеанса, но не выходите из системы F7 Войдите в режим прокрутки / поиска Ctrl-F5 Подключите все сокеты или агенты SSH / GPGМенее полезно:
Ctrl Разделить экран по горизонтали - Ctrl-F2 Сдвинуть экран по вертикали - Z Перенести фокус на следующий раскол - Shift-F4 Переместить фокус на предыдущий сплит - Shift-F5 Свернуть все расщепления - F5 Обновить все уведомления о состоянии - F8 Переименовать текущее окно - F9 Запустить меню настройки Byobu - F12 Экран исчезновения экрана GNU - Alt-Pageup Прокрутите назад историю этого окна - Alt-Pagedown Прокрутите вперед по истории этого окна - Ctrl-a-! Включите или отключите все комбинации клавиш Byobu -
at - отличный полезный инструмент для запуска команды в запланированное время. Это может быть «неправильно использовано» для отсоединения команды от оболочки:
echo './myprogram myoption1 myoption2' | at now
Также вы можете посмотреть setsid и start-stop-daemon, но другие методы должны быть достаточными.
Откройте терминал, введите экран, введите команду, которую вы хотите запустить, закройте терминал. Программа должна продолжать работать в сеансе экрана GNU.
Это сработало для меня:
$ (some-program &) &>/dev/null
# Examples:
$ (gedit &) &>/dev/null
$ (google-chrome &) &>/dev/null
Как полагают многие, nohup - это то, что нужно учитывать. Но nohup stills остается открытым на терминале и отображает активность программы на терминале, который раздражает. После этого вы можете просто закрыть терминал, чтобы этого избежать. Я нашел очень простой обходной путь, который я использую.
nohup gedit & exit
И все. Он открывает gedit и закрывает терминал при запуске gedit. Поскольку gedit теперь не связан с терминалом, он остается активным.
Использовать nohup
nohup - это программа, которая запускает заданную команду с игнорируемыми сигналами о задержке, так что команда может продолжать работать в фоновом режиме после завершения ее родительского процесса. См. ManpageНапример:
nohup gedit something
Чтобы запустить приложение и отсоединить его от запущенного терминала, используйте & amp;!
firefox &!
Это работает даже внутри скрипта (как и псевдонимы, трейлер '& amp;' обычно не разрешен в скриптах, потому что они не являются интерактивными):
bash -i >/dev/null 2>&1 <<<'nohup gedit &'
Это сработало для меня:
$ (nohup gedit 2>/dev/null &)
Он делает, и часто то, что вы хотите. Если вы забыли использовать & amp ;, вы можете приостановить программу с помощью ctrl-z, затем поместите ее в фоновом режиме с помощью команды bg и продолжите использовать эту оболочку.
Процесс 'stdin, stdout и stderr все еще подключены к терминалу; вы можете перенаправить их из / в / dev / null или любой другой файл (например, сохранить выходной журнал где-нибудь):
some-program </dev/null &>/dev/null &
# &>file is bash for 1>file 2>&1
Вы можете увидеть процесс на заданиях, вернуть его обратно переднего плана (команда fg) и отправить его сигналы (команда kill).
Некоторые графические программы будут отсоединены от терминала; если это так, когда вы запускаете команду «нормально», вы заметите, что она запускает графическую программу и «выйдет».
Вот короткий сценарий, вы можете разместить его в ~ / bin, который я назвал runbg:
#!/bin/bash
[ $# -eq 0 ] && { # $# is number of args
echo "$(basename $0): missing command" >&2
exit 1
}
prog="$(which "$1")" # see below
[ -z "$prog" ] && {
echo "$(basename $0): unknown command: $1" >&2
exit 1
}
shift # remove $1, now $prog, from args
tty -s && exec </dev/null # if stdin is a terminal, redirect from null
tty -s <&1 && exec >/dev/null # if stdout is a terminal, redirect to null
tty -s <&2 && exec 2>&1 # stderr to stdout (which might not be null)
"$prog" "$@" & # $@ is all args
Я просматриваю программу ($ prog) перед перенаправлением, чтобы можно было сообщить об ошибках в ее местонахождении. Запустите его как «runbg your-command args ...»; вы можете перенаправить stdout / err в файл, если вам нужно где-то сохранить выход.
За исключением переадресаций и обработки ошибок, это эквивалентно короткому скрипту .
Предположим, что gedit - это программа, которую вы хотите запустить отдельно (ака. «disown», «disentangle», «disouple»). Существуют разные способы в зависимости от того, что вы хотите сделать точно:
disown -h - это путь, если вы хотите сделать это с уже запущенной программой (т. е. если вы забыли nohup это). Сначала вам нужно остановить его, используя Ctrl + Z. Затем вы можете вставить в скобку с помощью bg [jobId] (например, bg 1). Вы получаете список рабочих заданий с их jobId с помощью jobs. После этого вы можете отделить его от терминала с помощью disown -h %[jobId]. Пример сеанса терминала:
confus@confusion:~$ gedit
^Z
[1]+ Stopped gedit
confus@confusion:~$ jobs
[1]+ Stopped gedit
confus@confusion:~$ bg 1
[1]+ gedit &
confus@confusion:~$ disown -h %1
confus@confusion:~$ exit
nohup не всегда присутствует на всех машинах. Если вы знаете, что хотите разделить заранее, вы будете использовать:
nohup gedit &
Возможно, вам захочется также перенаправить вывод оболочки, а ваша программа - на псевдо-источник, поэтому: nohup ./myprogram > foo.out 2> bar.err < /dev/null &. Вы хотите перенаправить вывод, чтобы он не был раздражен им или использовать его позже. Нулевой вход может помочь предотвратить hickups в ssh.
Вы можете добиться аналогичного эффекта с помощью
confus@confusion:~$ (geany 2>&1 /dev/null &)
Скобки открываются новая подоболочка для запуска gedit in. 2>&1 /dev/null перенаправляет вывод оболочки в никуда (подавление вывода). И & в конце ставит процесс в фоновом режиме.
Также терминальное мультиплексирование с использованием экрана или byobu. Вы в основном запускаете программу самостоятельно. Я действительно могу рекомендовать byobu по другим причинам. Ниже приведен список ярлыков boybu, которые могут пригодиться для ваших первых шагов:
Полезно:
F2 Создать новое окно F3 Перейти к следующему окну F4 Перейти к предыдущему Окно F6 Отсоедините от сеанса и выйдите из системы Shift-F6 Отсоедините от сеанса, но не выходите из системы F7 Войдите в режим прокрутки / поиска Ctrl-F5 Подключите все сокеты или агенты SSH / GPGМенее полезно:
Ctrl Разделить экран по горизонтали - Ctrl-F2 Сдвинуть экран по вертикали - Z Перенести фокус на следующий раскол - Shift-F4 Переместить фокус на предыдущий сплит - Shift-F5 Свернуть все расщепления - F5 Обновить все уведомления о состоянии - F8 Переименовать текущее окно - F9 Запустить меню настройки Byobu - F12 Экран исчезновения экрана GNU - Alt-Pageup Прокрутите назад историю этого окна - Alt-Pagedown Прокрутите вперед по истории этого окна - Ctrl-a-! Включите или отключите все комбинации клавиш Byobu -
at - отличный полезный инструмент для запуска команды в запланированное время. Это может быть «неправильно использовано» для отсоединения команды от оболочки:
echo './myprogram myoption1 myoption2' | at now
Также вы можете посмотреть setsid и start-stop-daemon, но другие методы должны быть достаточными.
Откройте терминал, введите экран, введите команду, которую вы хотите запустить, закройте терминал. Программа должна продолжать работать в сеансе экрана GNU.
Это сработало для меня:
$ (some-program &) &>/dev/null
# Examples:
$ (gedit &) &>/dev/null
$ (google-chrome &) &>/dev/null
Как полагают многие, nohup - это то, что нужно учитывать. Но nohup stills остается открытым на терминале и отображает активность программы на терминале, который раздражает. После этого вы можете просто закрыть терминал, чтобы этого избежать. Я нашел очень простой обходной путь, который я использую.
nohup gedit & exit
И все. Он открывает gedit и закрывает терминал при запуске gedit. Поскольку gedit теперь не связан с терминалом, он остается активным.
Использовать nohup
nohup - это программа, которая запускает заданную команду с игнорируемыми сигналами о задержке, так что команда может продолжать работать в фоновом режиме после завершения ее родительского процесса. См. ManpageНапример:
nohup gedit something
Чтобы запустить приложение и отсоединить его от запущенного терминала, используйте & amp;!
firefox &!
Это работает даже внутри скрипта (как и псевдонимы, трейлер '& amp;' обычно не разрешен в скриптах, потому что они не являются интерактивными):
bash -i >/dev/null 2>&1 <<<'nohup gedit &'
Это сработало для меня:
$ (nohup gedit 2>/dev/null &)
Таинственный амперсанд «& amp;» суффикс, кажется, заставляет терминал поместить процесс в фоновый режим ... (но я не уверен, что там происходит).
blockquote>Он делает, и часто то, что вы хотите. Если вы забыли использовать & amp ;, вы можете приостановить программу с помощью ctrl-z, затем поместите ее в фоновом режиме с помощью команды bg и продолжите использовать эту оболочку.
Процесс 'stdin, stdout и stderr все еще подключены к терминалу; вы можете перенаправить их из / в / dev / null или любой другой файл (например, сохранить выходной журнал где-нибудь):
some-program & lt; / dev / null & amp; gt; / dev / null & amp; # & amp; & gt; файл является bash для 1 & gt; файл 2 & amp; 1
Вы можете увидеть процесс в заданиях, вернуть его на передний план (команда fg) и отправить его сигналы (команда kill).
Некоторые графические программы будут отсоединены от терминала; если это так, когда вы запускаете команду «обычно», вы заметите, что она запускает графическую программу и «завершает».
Вот короткий script , вы можете поместить его в ~ / bin , который я назвал runbg:
#! / bin / bash [$ # -eq 0] & Amp; & Amp; {# $ # - количество аргументов args echo "$ (basename $ 0): отсутствует команда" & gt; & amp; 2 exit 1} prog = "$ (который" $ 1 ")" # см. ниже [-z "$ prog"] & amp; ; & амп; {echo "$ (basename $ 0): неизвестная команда: $ 1" & gt; & amp; 2 exit 1} shift # удалить $ 1, теперь $ prog, из args tty -s & amp; & amp; & amp; exec & lt; / dev / null #, если stdin является терминалом, перенаправление с нулевого tty -s & amp; 1 & amp; & amp; exec & gt; / dev / null #, если stdout является терминалом, перенаправляет на null tty -s & amp; 2 & amp; & amp; exec 2 & gt; 1 # stderr в stdout (который может быть не равен нулю) "$ prog" "$ @" & amp; # $ @ - все args
Я просматриваю программу ($ prog) перед перенаправлением, поэтому можно сообщить об ошибках в ее местонахождении. Запустите его как «runbg your-command args ...»; вы можете перенаправить stdout / err в файл, если вам нужно где-то сохранить выход.
За исключением перенаправления и обработки ошибок, это эквивалентно ответу htorque .
Это сработало для меня:
$ (nohup gedit 2 & gt; / dev / null & amp;)
Чтобы запустить приложение и отсоединить его от запущенного терминала, используйте & amp;!.
firefox & amp ;!
Это работает даже внутри скрипта (как и псевдонимы, трейлер «& amp;» обычно не разрешен в сценариях, потому что они не являются интерактивными):
bash -i & gt; / dev / null 2 & amp; 1 & lt; & lt; nohup gedit & amp;