У меня есть сеанс экрана, который я запускаю с несколькими окнами, которые запускают пару приложений, которые запускают консоль в окне терминала (поэтому я запускаю их на экране).
Я хотел бы убить все окна, а затем добавить обратно два новых, которые, по сути, просто повторно запустили команду, чтобы снова запустить программу.
Поскольку это может немного сбивать с толку, вот что я бы сделал, если бы просто пытался сделать это вручную в командной строке:
$ screen -x programs
$ (Hit Control-a + \ )
$ (Hit Control-a + c)
$ program1 args0 args1 #running first program again
$ (Hit Control-a + c)
$ program2 args0 args1 #running second program
Технически мне даже не нужно убивать существующие окна, просто остановите интерактивное окно. Обычно я делаю это, когда в окне просто нажимаю CTRL-D, и программа перестает работать. Потом просто снова запускаю программу.
Я знаю, что есть команды, с помощью которых я могу присоединиться к существующему сеансу экрана по имени, я просто понятия не имею, как я могу использовать это, чтобы отправить эквивалент CTRL + D, а затем отправить ему другую команду.
попробуйте это, чтобы завершить сеанс экрана.
screen -dr your_session_name -X quit
Примечание:
В разных системах Linux / Unix есть разные способы обработки длительных процессов. Если ваша система контролирует процессы с помощью systemd
, а его версия выше 230
, попробуйте прочитать последнюю версию руководства systemd.