Выполнить команду с помощью xterm и закрыть

Вопрос или проблема

Я пытаюсь выполнить программу с помощью xterm, а затем закрыть xterm с работающей программой, но кажется, это не работает так, как я ожидал.

В bash есть опция bash -c [команда], есть ли что-то подобное в xterm? В настоящее время я использую xterm -e [команда], но это оставляет окно xterm открытым, пока моя программа не завершится. Но я хочу открыть его, запустить программу, закрыть и продолжать работу программы.

Почему я хочу, чтобы программа запускалась через xterm, если я ее даже не использую? Я вызываю это через xpra на другом компьютере, но невозможно просто запустить программу, потому что мне нужно это с окружением на другом ПК.

Есть ли способ сделать это?

Я не думаю, что вам нужен xpra. ssh – хороший выбор

ssh user@hostname /path/to/program

или ssh + screen

ssh user@hostname "screen /path/to/program"

или xpra + screen

xpra user@hostname "screen /path/to/program"

Похоже, вы путаетесь в том, как все работает. Вам не нужен терминал для запуска программы.

“Запустить xterm, чтобы вы могли запустить процесс, а затем выйти из xterm” сводится к “запустить процесс”, и вы можете полностью исключить xterm.

Думаю, вы ищете

nohup command >command.out 2>command.err &

что запускает command как фоновый процесс (из-за &) с выводом в command.out и сообщениями об ошибках в command.err.

Если вас не волнует вывод или обработка сигналов с nohup, вы можете просто захотеть

command &

Это не позволяет вам взаимодействовать с фоновым процессом (но закрытие xterm также этого не позволяет, так что, думаю, вам это не нужно); если вы хотите иметь возможность это делать, рассмотрите screen или tmux, которые позволяют запускать программу в виртуальном терминале, с которым вы можете отключаться и подключаться позже.

Ответ или решение

Для решения задачи, описанной в вашем вопросе, необходимо сначала понять, как работает терминал xterm и что происходит, когда вы запускаете программу в нем. Основная цель состоит в том, чтобы запустить программу внутри xterm, затем закрыть его, но оставить программу работающей. Здесь мы рассмотрим различные подходы и техники, которые помогут достичь данной цели.

Теория

Xterm — это эмулятор терминала для системы X Window, который часто используется в UNIX-подобных системах для запуска различных команд и программ. Когда вы запускаете команду с помощью xterm -e [команда], xterm открывается, исполняет указанную команду и остается открытым до завершения программы. Это происходит потому, что xterm в своем стандартном режиме работы "привязан" к процессу, который он запускает, и закрывается только после завершения этого процесса.

Для достижения вашей цели — запустить программу и закрыть xterm, оставив программу работающей — нужно использовать подходы, которые позволят разорвать связь между жизненным циклом xterm и самой программой. Это можно сделать с помощью утилит и техник, таких как nohup, фоновые процессы, и менеджеры сеансов вроде screen или tmux.

Пример

  1. Использование nohup: nohup защищает процесс от сигналов HUP (hangup, сигнал обрыва соединения), которые обычно отправляются терминалу при его закрытии. Таким образом, процесс продолжит работать даже после закрытия xterm.

    xterm -e "nohup [команда] > output.log 2>&1 &"

    Здесь nohup [команда] > output.log 2>&1 & запускает вашу программу в фоновом режиме, перенаправляя стандартный вывод и ошибки в файл output.log. Символ & гарантирует, что процесс будет запущен в фоновом режиме.

  2. Использование screen или tmux: Эти утилиты позволяют запустить вашу программу в отдельной сессии, от которой можно отключиться и позже подключиться. Это подход особенно удобен для удаленного управления.

    Сначала установите screen или tmux, если они еще не установлены. Затем используйте:

    xterm -e "screen -dmS mysession [команда]"

    Эта команда создаст новый экранный сеанс с именем mysession, в котором запустится ваша команда. У xterm теперь нет необходимости оставаться открытым, потому что программа фактически запускается в сеансе screen, который работает в фоновом режиме.

Применение в Задаче

Вам, возможно, кажется, что использование xterm необходимо из-за специфики запуска на другой машине с помощью xpra. Однако зачастую проще исключить использование xterm и работать напрямую через SSH или другие инструменты, способные управлять окружениями.

  1. SSH и запуск программы напрямую:

    Использование SSH для удаленного запуска программы без необходимости использования графической среды или xterm может быть более простым решением. Пример команды:

    ssh user@hostname "nohup /path/to/program > /dev/null 2>&1 &"

    Здесь nohup гарантирует продолжение выполнения программы после завершения сеанса SSH.

  2. Удаленное использование screen или tmux:

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

    ssh user@hostname "screen -dmS mysession /path/to/program"

    Или эквивалентная команда с использованием tmux:

    ssh user@hostname "tmux new-session -d -s mysession /path/to/program"

Таким образом, хотя изначальные требования могли казаться состоящими в необходимости использования xterm, зачастую удобнее и эффективнее избежать от него в пользу более прямых и гибких решений.Обратите внимание на использование утилит в зависимости от специфических требований к управлению процессами и окружениями. Это может значительно упростить задачу и сделать управление процессами более надежным и предсказуемым.

Оцените материал
Добавить комментарий

Капча загружается...