Intereting Posts
Вырезанная таблица разделов Windows Как проверить, включено ли ускорение аппаратного обеспечения? Почему запуск скрипта и сценария kill не отображается в папке rcX.d? Когда использовать BIND против внутреннего DNS для бэкэнд Samba 4 Как я могу загрузить RedHat с внешнего жесткого диска на компьютере macbook? Использование 'find' для рекурсивного поиска и удаления Соединения SSH, работающие в фоновом режиме, не выводятся, если несколько соединений были запущены одной и той же оболочкой Как растеризовать весь текст в PDF? Персонализируйте вывод сенсора и сохраните его в файл почему гном 3 отстает во всех дистрибутивах? Что вызывает паузу во время зонда системного устройства? Работа с файлами rar Как сделать остановку обслуживания одновременно? Что такое однопользовательский эквивалент для / opt? Регистрировать каждый вызов каждой SUID-программы?

закрытие неиспользуемых терминалов гнома

во время работы я запускаю много гномов-терминалов и что-то с ними делаю. dd на первом терминале, 12 сеансов ssh на кучу серверов, чтобы что-то сделать. Эти сеансы завершают работу и отключаются для простоя или потому что сеанс закрывается после команды.

Однако мне нужен скрипт, который закрывает неиспользуемые процессы gnome-terminal. Я думал о мягком уничтожении всех процессов zsh без дочерних процессов. Это, мы надеемся, закроет терминал чистым способом.

 init─┬─[...] ├─gnome-terminal─┬─gnome-pty-helpe │ ├─2*[zsh───ssh] │ ├─zsh───dd │ ├─zsh───pstree │ ├─4*[zsh] <<<< │ └─{gnome-terminal} . . . 

Я думаю о написании более или менее простого сценария bash для проверки запущенных процессов и их завершения, если zsh не имеет дочерних процессов и не работает в течение 4 часов.

Я не уверен

  • Если это вообще хорошая идея.
  • Если кто-то уже опубликовал инструмент для этого
  • Если есть способ получить дочерние процессы zsh (без grep ing и awk ing pstree output;)
  • Как я получил последнее действие (подумал о команде pre и post в zsh)
  • Если есть лучший способ, чем kill -HUP <zsh pid> чтобы закончить процессы

заранее спасибо

Согласно руководству zsh

TMOUT Если этот параметр отличен от нуля, оболочка получит сигнал ALRM, если команда не вводится в течение указанного количества секунд после выдачи подсказки. Если на SIGALRM есть ловушка, он будет выполнен и новый аварийный сигнал будет запланирован с использованием значения параметра TMOUT после запуска ловушки. Если ловушка не установлена, а время простоя терминала не меньше значения параметра TMOUT, zsh завершается. В противном случае новый аварийный сигнал запланирован на TMOUT секунд после последнего нажатия клавиши.

Я тестировал

 zsh> export TMOUT=10 

и главный гном-терминал умер, когда оболочка закрылась. Тот же механизм также работает в bash. Это устраняет ваши проблемы с подключением терминалов занятости, поскольку он начинает отсчет только после выдачи приглашения оболочки

Я не думаю, что это хорошая идея вообще, поскольку она создает «волшебные» события, которые могут потенциально потерять состояние. Я бы порекомендовал лучше работать с клавишами «закрыть окно» и «сфокусировать другое окно (возможно, терминал)» вашего оконного менеджера по выбору. Но если вы хотите использовать терминалы poofing, это, вероятно, лучший способ.

Если вы используете exec для запуска вашей команды (например, exec ssh *hostname* ), терминал gnome, на котором он запущен, должен закрыться, когда процесс завершается (предполагается, что он установлен для выхода из терминала при выходе команды, что является значением по умолчанию) ,

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