Я использую Tilda (выпадающий терминал) на Ubuntu как моя "команда, центральная" - в значительной степени способ, которым другие могли бы использовать GNOME, Делают, Quicksilver или Launchy.
Однако я борюсь с тем, как полностью отсоединить процесс (например, Firefox) от терминала, он был запущен от - т.е. предотвращает это такой (не-) дочерний процесс
Например, для запуска Vim в "надлежащем" окне терминала, я попробовал простой сценарий как следующее:
exec gnome-terminal -e "vim $@" &> /dev/null &
Однако это все еще вызывает загрязнение (также, передавание имени файла, кажется, не работает).
В первую очередь; после того как Вы запустили процесс, Вы можете фон он первой остановкой его (Ctrl-Z хита) и затем ввод bg
позволять ему возобновиться в фоновом режиме. Это - теперь "задание" и stdout
/stderr
/stdin
все еще подключены к Вашему терминалу.
Можно запустить процесс как фон сразу путем добавления "и" в конец его:
firefox &
Для выполнения это в фоновом режиме заставило замолчать, используйте это:
firefox </dev/null &>/dev/null &
Некоторая дополнительная информация:
nohup
программа, которую можно использовать для запуска приложения с таким образом, что его stdout/stderr может быть отправлен в файл вместо этого и таким образом, что закрытие родительского сценария не будет SIGHUP ребенок. Однако у Вас должно быть предвидение для использования его, прежде чем Вы запустили приложение. Из-за пути nohup
работы, Вы не можете только применить его к рабочему процессу.
disown
удар, встроенный, который удаляет задание оболочки из списка задания оболочки. То, что это в основном означает, - то, что Вы не можете использовать fg
, bg
на нем больше, но что еще более важно при закрытии оболочки, она не подвесит или отправит a SIGHUP
тому ребенку больше. В отличие от этого, nohup
, disown
используется после того, как процесс был запущен и фон.
То, что Вы не можете сделать, является изменением stdout/stderr/stdin процесса, запустив его. По крайней мере, не от оболочки. Если Вы запускаете свой процесс и говорите ему, что его stdout является Вашим терминалом (который является тем, что Вы делаете по умолчанию), то тот процесс настроен для вывода к терминалу. Ваша оболочка не имеет никакого бизнеса с установкой FD процессов, это - просто что-то, чем сам процесс управляет. Сам процесс может решить, закрыть ли его stdout/stderr/stdin или нет, но Вы не можете использовать свою оболочку, чтобы вынудить его сделать так.
Для управления выводом фонового процесса у Вас есть много опций из сценариев, "nohup", вероятно, являющийся первым, чтобы прийти на ум. Но для интерактивных процессов Вы запускаете, но забыли заставлять замолчать (firefox < /dev/null &>/dev/null &
) Вы не можете сделать многого, действительно.
Я рекомендую получить GNU screen
. С экраном можно просто закрыть рабочую оболочку, когда вывод процесса становится беспокойством, и откройте новый (^Ac
).
О, и между прочим, не используйте"$@
"где Вы используете его.
$@
средства, $1
, $2
, $3
..., который повернул бы Вашу команду в:
gnome-terminal -e "vim $1" "$2" "$3" ...
Это, вероятно, не, что Вы хотите, потому что-e только берет один аргумент. Использовать $1
показать, что Ваш сценарий может только обработать один аргумент.
Действительно трудно получить несколько аргументов, работающих правильно в сценарии, который Вы дали (с gnome-terminal -e
) потому что -e
берет только один аргумент, который является командной строкой оболочки. Необходимо было бы закодировать аргументы в один. Лучшее и самое устойчивое, а скорее cludgy, путь похож так:
gnome-terminal -e "vim $(printf "%q " "$@")"
в tcsh (и возможно в других оболочках также), можно использовать круглые скобки для отсоединения процесса.
Сравните это:
> jobs # shows nothing
> firefox &
> jobs
[1] + Running firefox
К этому:
> jobs # shows nothing
> (firefox &)
> jobs # still shows nothing
>
Это удаляет Firefox из списка заданий, но он все еще связывается с терминалом; если Вы вошли в систему этого узла через 'ssh', пытаться выйти из системы все еще подвесит процесс ssh.
Если Вы используете bash
, попробовать disown [jobspec]
; посмотрите удар (1).
Другой подход, который можно попробовать, at now
. Если Вы не суперпользователь, Ваше разрешение использовать at
может быть ограничен.