Почему делают некоторые приложения через терминальное отсоединение автоматически, и некоторые не делают?

Это - вполне интересная вещь, которую я заметил, например:

  • Я использую Редактора Atom, и я называю его через свое Терминальное использование:

    $ atom
    

    и нажмите Enter, который инициировал Редактора, и также выскажите терминальное мнение курсора к новой строке; создание его (Терминал), свободный для дальнейших утилит командной строки.

  • Однако, когда используемое использование RhythmBox rhythmbox как терминальная команда, это имеет тенденцию работать над передним планом (я предполагаю), и сохраняет терминал занятым, пока я не закрываю Rhythmbox или использую CTRL+C.

Я попробовал это texmaker также и это выполняет подобную вещь как Rhythmbox. Я знаю это & возьмет процесс на фоне, но там логическое объяснение некоторых приложений, как упомянуто здесь?

Какие-либо взломы или подсказки так, чтобы я мог изучить, как настроить вещи как это?

Примечание:

Я пытаюсь использовать CTRL+Z на вышеупомянутых приложениях, и приложения затем отображаются серым и становятся безразличными, и я должен вызвать выход на них

Среда

  • Использование Ubuntu 16.10

  • Терминал Gnome

  • echo $SHELL дать /bin/bash

1
задан 17 March 2017 в 16:10

2 ответа

Как был указан в комментариях, такое поведение характерно для каждого приложения. Приложения, записанные на языке программирования C, например, могут использовать setsid звоните для разъединения от управления терминалом, хотя они требуют вызова к fork() syscall сначала. Python, также имеет os.setsid() и os.fork() функции; хотя возможно просто использовать os.fork() создать дочерний процесс и уничтожить родителя.

Другая очень частая техника, которую используют авторы программного обеспечения, запускает приложения с помощью сценария обертки и называет новый процесс через nohup. Это точно что atom делает:

$ file $(which atom)
/usr/bin/atom: Bourne-Again shell script, ASCII text executable
$ grep 'nohup' $(which atom)                                                            
    nohup "$ATOM_PATH" --executed-from="$(pwd)" --pid=$$ "$@" > "$ATOM_HOME/nohup.out" 2>&1
      cat "$ATOM_HOME/nohup.out"

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

runstuff() {
    nohup "$@" >/dev/null 2>&1 & 
} 

После того как Вы определяете это в Вашем .bashrc , можно запустить Firefox как так:

runstuff firefox

Иначе, через setsid команда (который называют тем же как системный вызов C, но является на самом деле автономным двоичным файлом):

setsid firefox
3
ответ дан 3 December 2019 в 06:54

При использовании Ubuntu с X environemnt, можно продвинуть Ctrl + F2 и затем поместить команду, в которой Вы нуждаетесь (т.е. rythmbox). Это не будет иметь отдельного терминала, где можно продвинуть ctrl+C.

можно также попытаться работать nohup rythmbox &. Это должно выполнить Ваш плеер в backgroud и сделать это terminal-close-proof.

1
ответ дан 3 December 2019 в 06:54

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

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