Рейтинг:0

Как я могу установить универсальное ограничение по времени для любой операции командной строки?

флаг in

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

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

Как я могу это сделать?

Конкретная причина является личной и прозвучала бы странно, если бы я объяснил, почему, но явная цель заключается в том, что я не хочу, чтобы какой-либо процесс командной строки занимал больше, чем очень короткий период времени, в идеале десятую долю секунды или что-то, что казалось бы немедленным. Я хочу заставить свои вычисления строиться из коротких процессов и адаптировать все процессы, которые мне нужно выполнять, к коротким периодам времени. Если процесс занимает больше времени, я должен найти способ заменить его или каким-то образом адаптировать свою систему, чтобы она укладывалась в установленное время. Если в фоновом режиме происходят процессы, на которые мне никогда не приходится смотреть или думать, это нормально. Это должны быть команды, которые я вижу и выполняю в командной строке.

Я хочу сделать это на сервере Ubuntu, поэтому я не буду использовать графический интерфейс. Я использую 21.04, но номер версии для меня не важен.

Как это:

$ ls # возвращается через 0,05 секунды
Документы
Мои файлы
файл.txt

$ python3 myscript.py # возвращается через 0,09 секунды
Это вывод скрипта Python.

$ wget url # работал 0,1 секунды, после чего операционная система завершила его
ПРОЦЕСС ПРЕКРАЩЕН ИЗ-ЗА ОГРАНИЧЕННОГО ВРЕМЕНИ
user535733 avatar
флаг cn
Для меня это выглядит как [вопрос XY](https://en.wikipedia.org/wiki/XY_problem): вместо того, чтобы спрашивать о проблеме, вы спрашиваете о предпочтительном решении. Вы можете получить лучшую помощь, если спросите об основной проблеме, которую, кажется, решает универсальное ограничение времени. Многие команды выполняются за кулисами — ограничение по времени может неожиданно прервать ваш рабочий стол или сетевое соединение или иметь другие неожиданные последствия.
флаг ar
Добро пожаловать в Ask Ubuntu.Пожалуйста, [отредактируйте свой вопрос](https://askubuntu.com/posts/1370992/edit) и добавьте больше информации о реальной проблеме, а также о дистрибутиве и номере версии Linux, который вы используете. Вы используете настольную или серверную версию?
muru avatar
флаг us
Проверьте `cpu` в [`limits.conf`](https://manpages.ubuntu.com/manpages/focal/man5/limits.conf.5.html).
sudodus avatar
флаг jp
Так что это процессы, которые вы запускаете сами и смотрите в текстовом экране (в консоли или через ssh или что-то подобное). Вам легко заметить, длятся ли они дольше секунды или меньше секунды. Запускайте их с префиксом времени: `time command -options parameters`. Вы заметите, если они занимают больше одной секунды, и вы можете отключить их вручную. Если короче, вы получите использованное время, напечатанное командой time.
флаг in
@sudodus Спасибо за ваше предложение, но я прошу прощения, это не то, что я пытаюсь сделать. Мне не нужно выяснять, сколько времени это заняло. Я хочу, чтобы он не длился дольше определенного времени автоматически.
sudodus avatar
флаг jp
Я пытался понять, но не смог. Пожалуйста, объясните еще раз: есть ли процессы, которые запускаются автоматически, работают на переднем плане и печатают на экран? Или что-то другое? Я думал, что вы хотите найти или разработать достаточно быстрые команды и избежать слишком медленных команд.
флаг in
Я только что написал выше о «фоновых процессах», имея в виду, что это нормально, если компьютер выполняет какой-то процесс, о котором пользователь не знает. Это не должно быть ограничено во времени. Просто все, что происходит в терминале, в командной строке, делает пользователь. Если я ввожу команду в оболочку, она возвращается до истечения срока или отменяется и возвращается к подсказке до истечения срока.
sudodus avatar
флаг jp
Это нормально для вас, если процессы оставляют открытые файлы частично записанными и, возможно, поврежденными?
флаг in
Я открыт для изучения всего, что делает это возможным, поэтому, если это необходимо, то да, мне интересно, если этого можно избежать, я могу изучить способы устранения проблем по мере того, как буду углубляться в это.
sudodus avatar
флаг jp
Давайте [продолжим это обсуждение в чате](https://chat.stackexchange.com/rooms/130782/discussion-between-sudodus-and-peter-elbert).
флаг in
Конечно, я там. Спасибо
Рейтинг:1
флаг jp

Префикс с шеллскриптом проверять

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

#!/бин/баш

если [ "$1" == "--debug" ]
тогда
 отладка = истина
 сдвиг
еще
 отладка=ложь
фи

"$@" и pid=$!
спать 0,1 # раз (с) до убийства
убить $pid 2> /dev/null
res="$?"

если $отладка
тогда
 если [ $res -eq 0 ]
 тогда
  echo "убит по тайм-ауту: $@"
 еще
  echo "закончено изящно: $@"
 фи
фи

Пример 1

$ ./check --debug bash -c "пока верно;выполнить дату '+%s.%N';спать 0,01;готово"
1634944386.589977656
1634944386.603126888
1634944386.616089924
1634944386.629058026
1634944386.642334480
1634944386.655644267
1634944386.668289318
1634944386.681058710
убит по тайм-ауту: bash -c while true;do date '+%s.%N';sleep 0.01;done

Пример 2

$ ./проверить --debug lsblk
НАИМЕНОВАНИЕ MAJ:MIN RM РАЗМЕР RO ТИП ТОЧКА КРЕПЛЕНИЯ
sda 8:0 0 238,5G 0 диск 
ââsda1 8:1 0 500M 0 часть 
ââsda2 8:2 0 139,4G 0 часть 
ââsda3 8:3 0 1000M 0 часть 
ââsda4 8:4 0 1K 0 часть 
ââsda5 8:5 0 89,7G 0 часть /
ââsda6 8:6 0 8G 0 часть [SWAP]
sdb 8:16 0 3,7T 0 диск 
ââsdb1 8:17 0 510M 0 часть 
ââsdb2 8:18 0 30G 0 часть 
ââsdb5 8:21 0 1M 0 часть 
ââsdb6 8:22 0 100G 0 часть 
ââsdb7 8:23 0 3,5T 0 часть /media/multimed-2
ââsdb8 8:24 0 5G 0 часть 
sr0 11:0 1 1024M 0 ром  
nvme0n1 259:0 0 232,9G 0 диск 
âânvme0n1p1 259:1 0 232,9G 0 часть 
âânvme0n1p2 259:2 0 1M 0 часть 
закончил изящно: lsblk

Примитивная кастомная оболочка пш

Еще одна альтернатива, примитивная оболочка домашнего режима. пш можно использовать и для этой цели.

  • Преимущество: вы можете запускать команды напрямую без каких-либо дополнительных префиксов.

  • Недостатки: Вы можете редактировать командную строку, но нет истории и у вас нет доступа к истории стандартной оболочки, например бить, зш, ткш`). Также отсутствуют некоторые другие функции стандартной оболочки.

Сценарий оболочки bash пш и скрипт python3 приколоть следует сделать исполняемым и скопировать, переместить или связать в каталог в ДОРОЖКА, Например /USR/местные/бен,

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

пш,

#!/бин/баш

tmpf=$(mktemp)
курдир = "$ (пароль)"
cmd=
пока правда
делать
# прочитать -p "psh:$curdir> " cmd 2>&1
# эхо "$cmd" > "$tmpf"
 булавка "$curdir" "$tmpf"
# кошка "$tmpf"
 cmd=$(кот "$tmpf")
 если [ "$cmd" != "выход" ]
 тогда
  если [ "${cmd:0:3}" == "кд" ]
  тогда
   источник "$tmpf"
   курдир = "$ (пароль)"
  еще
   источник "$tmpf" и pid=$!
   спать 0,1 # раз (с) до убийства
   убить $pid 2> /dev/null
  фи
 еще
  сломать
 фи
сделано 2> /dev/null
рм "$tmpf"

приколоть,

#!/usr/bin/python3

из системного импорта argv
импортировать rlcompleter
импортировать строку чтения
readline.parse_and_bind("вкладка: завершена")
приглашение = 'psh:{0} > '.format(argv[1])

f = открыть (argv[2], 'w')
cmd = ввод (приглашение)
f.write('{0}\n'.format(cmd)) # запись в первый аргумент

Пример:

sudodus@bionic64 /media/multimed-2/test/test0/temp/PeterElbert $ psh
psh:/media/multimed-2/test/test0/temp/PeterElbert > while true; do date '+.%N'; sleep 0.008; done
.753302869
.763750113
.773720876
.783983502
.794652755
.805570413
.816651252
.827621482
.838553391
.849516607
psh:/media/multimed-2/test/test0/temp/PeterElbert > ls -l
всего 12
-rwxrwxr-x 1 судодус судодус 282 окт 23 01:18 проверить
-rwxrwxr-x 1 судодус судодус 255 окт 23 07:18 булавка
-rwxrwxr-x 1 судодус судодус 438 окт 23 07:51 пш
psh:/media/multimed-2/test/test0/temp/PeterElbert > cd ..
psh:/media/multimed-2/test/test0/temp > выход
sudodus@bionic64 /media/multimed-2/test/test0/temp/PeterElbert $ 

Ответить или комментировать

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