заставить программу немедленно вернуться в командную строку, чтобы она не была привязана к оболочке, которая ее запустила - PullRequest
5 голосов
/ 26 января 2010

Некоторые программы сразу возвращаются при запуске из командной строки, например, Firefox. Большинство утилит (и все программы, которые я написал) связаны с оболочкой, которая их создала. Если вы управляете командной строкой c, значит, программа не работает.

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

Мне почти стыдно спрашивать об этом, но я не могу найти ответ сам.

Спасибо!

Ответы [ 4 ]

7 голосов
/ 26 января 2010
start cmd 

в Windows,

cmd &

на * nux

Здесь подставим

cmd = java -jar JarFile.jar

На * nux команды fg и bg тоже ваши друзья ...

3 голосов
/ 26 января 2010

Скрипт-обёртка, состоящая только из:

your_prog_or_script &

Запустит цель и немедленно выйдет. Вы можете добавить nohup в начало этой строки, чтобы она продолжала работать при выходе из оболочки.

3 голосов
/ 26 января 2010

В основном вам нужно форкнуть процесс или создать новый поток (или сделать вид)

в * nux вы можете сделать это с помощью & после команды, подобной этой /long/script &, или в Windows вы можете создать BATCH-файл, который выполняет ваши процессы, а затем завершает работу (это делает это естественно).

ПРИМЕЧАНИЕ: нет особенно хорошего способа сослаться на этот процесс после того, как вы его разветвите, в основном только ps для списка процессов. если вы хотите увидеть, что делает процесс, проверьте с помощью screen (еще одна команда linux), которая запустит для вас сеанс и позволит вам «снова присоединиться» к экрану.

для этого установите экран (sudo apt-get install screen или yum install screen). затем введите screen, чтобы создать новый сеанс (заметьте, похоже, что вы ничего не делали). затем запустите /long/command (без &), затем нажмите CTRL + A + D (одновременно), чтобы отсоединиться от него (он все еще работает!). затем, когда вы хотите повторно присоединить, введите screen -r.

Кроме того, ищите флаги в любом справочном сообщении, которые позволяют вам сделать это без использования вышеуказанных опций (например, в synergy вы можете сказать synergy --background)

2 голосов
/ 26 января 2010

Для исполняемой программы (в отличие от сценария оболочки) в Linux / Unix используйте fork () и exec (), а затем выйдите из родительского процесса, который вернется в оболочку. Подробнее см. Справочные страницы или страницы типа http://www.yolinux.com/TUTORIALS/ForkExecProcesses.html.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...