Закладка Shell, открытая через скрипт, зависает после того, как Ctrl + C запускает процесс

У меня есть следующий скрипт:

#!/usr/bin/env zsh START_FOREMAN='/usr/bin/zsh -c "source /home/user/.zshrc; foreman start" zsh' xfce4-terminal --tab -H -T app-server --working-directory=/home/user/git/app -e $START_FOREMAN xfce4-terminal --tab -H -T api-server --working-directory=/home/user/git/api -e $START_FOREMAN 

Обе эти команды зависят от настроек env (конфигурация chruby ), поэтому я ./zshrc файл ./zshrc перед запуском foreman .

Однако, если я запустил это, а затем попытаюсь выполнить Ctrl+C из долгого процесса – оболочка закончится, и я никогда не верну свое приглашение.

Примечание: запуск запуска мастера в новой оболочке в том же каталоге возвращает подсказку мне после Ctrl+C

Редактировать: Люди, кажется, попадают на бригадира, являющегося проблемой, которая, как мне кажется, не так, поскольку это зависает, когда вы говорите ./gradlew bootRun или любой продолжительный процесс.

Форман определенно выходит:

 ^CSIGINT received 16:13:09 system | sending SIGTERM to all processes 16:13:10 api.1 | exited with code 130 

Как и весенняя загрузка:

 java.io.IOException: Stream closed at java.io.BufferedInputStream.getBufIfOpen(BufferedInputStream.java:170) at java.io.BufferedInputStream.read1(BufferedInputStream.java:291) at java.io.BufferedInputStream.read(BufferedInputStream.java:345) at java.io.FilterInputStream.read(FilterInputStream.java:107) at org.gradle.process.internal.streams.ExecOutputHandleRunner.run(ExecOutputHandleRunner.java:51) at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:54) at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:40) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) :bootRun FAILED > Building 100% 

На данный момент я ничего не могу сделать – все игнорируется, и мне нужно закрыть вкладку.

One Solution collect form web for “Закладка Shell, открытая через скрипт, зависает после того, как Ctrl + C запускает процесс”

То, что вы наблюдаете, представляет собой сочетание двух вещей:

  1. Ctrl-C отправляет INT в группу процессов, а это означает, что не только ваш длительный процесс, но и процесс zsh, в котором он запущен, будет завершен одновременно (и у него не будет возможности перезапустить его).

  2. xfce4-terminal, не закрывает вкладку после завершения вашего процесса из-за флага -H:

-H, -hold Заставляет терминал поддерживаться после завершения дочерней команды

что делает его похожим на то, что он висит

Простейший возможный тестовый пример для этого может выглядеть примерно так:

 CMD=xeyes START=$'/usr/bin/zsh -c \''$CMD$'; /usr/bin/zsh\'' xfce4-terminal --tab -H -T mycommand --working-directory=$HOME -e "$START" 

Если вы запустите это, «xeyes» будет следовать за вами, пока вы не нажмете Ctrl + C , после чего они закроются, и ваш терминал окажется висящим.

Но если вместо нажатия Ctrl + C вы просто будете убивать самих xeyes (то есть с помощью панели задач xkill или панели диспетчера окон), сеанс zsh начнется по назначению.

Обходным путем для этого является перехват SIGINT и перезапуск оболочки, например:

 CMD=xeyes START=$'/usr/bin/zsh -c \'trap "exec /usr/bin/zsh" INT;'$CMD$'; exec /usr/bin/zsh\'' xfce4-terminal --tab -H -T mycommand --working-directory=$HOME -e "$START" 

Обратите внимание, что вы также можете удалить «-H», чтобы закрыть вкладку, когда вы выходите из оболочки.

  • find -exec on zsh: эхо работает, как и ожидалось, печать не
  • Что такое расщепление слов? Почему это важно в программировании оболочки?
  • псевдоним? не работает в zsh
  • Как удалить все, кроме числовых каталогов верхнего уровня?
  • привязка ключевых ссылок к функциям оболочки в zsh
  • `ls \` выходит из сеанса терминала?
  • Как сохранить конечную косую черту после выбора каталога из параметров завершения zsh?
  • Shell Script для перехода через рекурсивно и chmodding в соответствии с условиями типа файла
  • Написание функций zsh, которые работают
  • Как настроить zsh для запуска меню - для параметров команды?
  • Отключить Oh-My-ZSH Завершение начала имени файла
  • Interesting Posts

    3DR Solo Drone WiFi Communication

    Как интерпретируется «среднее значение нагрузки» в «верхнем» выходе? Это то же самое для всех распределений?

    Как установить wlan0 по умолчанию в / etc / network / interfaces?

    Невозможно добавить `tint2` в процесс запуска в Arch Linux с Openbox

    apt установка дополнительных пакетов, чем указано в качестве зависимостей

    Можно ли привязать встроенные команды к Bash?

    Могу ли я исправить плохие блоки на моем жестком диске с помощью одной команды?

    Ip, отправляющий малину pi

    Как мне начать X после ssh'ing в удаленную коробку?

    start-stop-daemon не запускает мой скрипт Python как службу

    что Linux рассматривает подключенные USB-накопители и почему они остаются в виде папок при отключении?

    bash – выделение прописных слов

    Arch: компиляция toplev.o не выполняется при установке GCC

    Xorg несколько позиций экрана

    Я не понимаю, почему он говорит, что «Ожидается целочисленное выражение»

    Linux и Unix - лучшая ОС в мире.