Поддержка Linux нового Sony Vaio Z внешняя видеокарта?

Bash запись FAQ № 68: "Как я выполняю команду и имею ее аварийное прекращение работы (тайм-аут) после N секунды?"

СНАЧАЛА проверьте, может ли команда, которую Вы выполняете, быть сказана тайм-ауту непосредственно. Методы, описанные здесь, являются "hacky" обходными решениями, чтобы вынудить команду завершиться после того, как определенное время протекло. Конфигурирование Вашей команды правильно всегда предпочтительно для альтернатив ниже.

Если команда не имеет никакой собственной поддержки остановки после требуемого времени, то лучшие альтернативы являются некоторыми внешними командами, названными тайм-аутом и doalarm. Некоторые дистрибутивы Linux предлагают tct версию тайм-аута как пакет. Существует также версия GNU тайм-аута, включенного в недавние выпуски coreutils.

Остерегайтесь: по умолчанию некоторые реализации тайм-аута выходят, SIGKILL (уничтожьте-9), который является примерно тем же как вытаскиванием шнура питания (оставляющий шанс для программы для фиксации ее работы, часто приводящей к повреждению ее данных). Необходимо использовать сигнал, который позволяет программе завершать работу себя вместо этого (SIGTERM). Посмотрите ProcessManagement для получения дополнительной информации о SIGKILL.

Главная разница между doalarm и тайм-аутом - то, что doalarm "должностные лица" программа после установки предупреждения, которое делает это замечательным в WrapperScript; в то время как тайм-аут запускает программу как ребенка и затем бродит вокруг (оба процесса существуют одновременно), который дает ему возможность отправить больше, чем сигнал единицы при необходимости.

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

doalarm() { perl -e 'alarm shift; exec @ARGV' "$@"; }

doalarm ${NUMBER_OF_SECONDS_BEFORE_ALRMING} program arg arg ...

Если Вы не можете или не использовать одну из этих программ (который действительно должен был быть включен с основными базовыми утилитами Unix 30 лет назад!), затем лучшим, который можно сделать, является ужасный взлом как:

 command & pid=$!
 { sleep 10; kill $pid; } &

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

Возможно сделать что-то подобное, но сохранить команду на переднем плане:

 bash -c '(sleep 10; kill $$) & exec command'

kill $$ уничтожил бы оболочку, за исключением того, что должностное лицо заставляет команду принимать PID оболочки. Необходимо использовать удар-c так, чтобы оболочка вызова не была заменена; в ударе 4, возможно использовать подоболочку вместо этого:

 ( cmdpid=$BASHPID; (sleep 10; kill $cmdpid) & exec command )

Сценарий оболочки "тайм-аут" (чтобы не быть перепутанным с командой 'тайм-аут') использует второй подход выше. Это сразу имеет преимущество работы (никакая потребность в компиляции программы), но имеет проблемы, например, с программами, читая стандартный вход.

Просто используйте тайм-аут или doalarm вместо этого.В самом деле.

4
30.07.2011, 07:37
1 ответ

Лучшие возможности будут в этом списке рассылки: http://lists.launchpad.net/sony-vaio-z-series

2
27.01.2020, 21:00

Теги

Похожие вопросы