Действительно ли возможно отключить подробный посреди выполнения?

Ваш regexp m/dtllst $myNode | $myNode/ будет соответствовать (в особенности) любому возникновению $myNode. Конструкцией, psg dtllst | grep $myNode возвратит что-то, что соответствует $myNode, так Вы regexp всегда соответствует.

Если Вы не можете последовать совету и использованию других людей pgrep или ps ... | grep или варианты этого, Вы могли также:

  1. набор "$checkProc = psg dtllst | grep 'dtllst $myNode';" и затем просто тест, если $checkProc непусто, или

  2. набор "$checkProc = psg dtllst;" и затем соответствуйте ему против m/dtllst $myNode/

  3. Используйте Proc:: модуль ProcessTable CPAN и просто ищет запись $p таким образом, что $p->cmdline =~ m/dtllst $myNode/

3
07.08.2012, 13:56
2 ответа

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

Чтобы сделать это, закройте терминал после сообщения оболочки не отправить SIGHUP. Большинство оболочек отправит SIGHUP в любые задания, которые все еще работают, когда Вы пытаетесь выйти. Можно сказать оболочке не делать это. Существуют различные способы сделать это; самое простое, вероятно, с disown.

Если Вы еще не имеете, приостанавливаете задание с ctrl+z, затем заставьте его работать снова в фоновом режиме с bg, затем выполненный disown. Оболочка больше не отслеживает этот процесс как задание, таким образом, это не отправит SIGHUP при выходе.

Если Вы уже поместили программу в backgound, то, если будут какие-либо другие фоновые задания, которые были запущены после него, то Вам будет нужен jobspec программы, которой Вы интересуетесь использовать в качестве параметра для передачи bg и disown.

6
27.01.2020, 21:09
  • 1
    Спасибо! (1) Как я могу найти jobspec программы, если это работает в фоне? (2) После ctrl+Z, программа приостановлена, и ее идентификатор задания равняется 1. Затем я ввожу bg 1, и затем программа продолжает работать и выводы снова в терминале. Я не знаю, как я могу ввести, "отрицают 1" снова, когда это - вывод к терминалу. Ctrl+Z не работает на программы, работающие в фоне. –  StackExchange for All 07.08.2012, 16:15
  • 2
    @Tim я не нашел официальный ресурс, говорящий, каково это, но от экспериментирования, поле справа (который показывает команду), работы в ударе и zsh, но не в пепле. Иногда pid также работает. –  Shawn J. Goff 07.08.2012, 18:20
  • 3
    @Tim, если что-то работает в фоновом режиме и все еще пишет в наш экран, существует две вещи, которые можно сделать здесь: (1) Можно ввести слепую команду и возврат хита, у Вас все еще есть подсказка, это просто перезаписывается. Команда будет выполняться. (2) Если Вы действительно хотите остановить команду, ввести fg слепой, возврат хита, затем Ctrl-Z хита. Это приносит программу в fg и затем приостанавливает его снова (приводящий Вам назад полный круг). –  ffledgling 14.10.2015, 14:47

Возможно, существует взлом, который позволил бы изменять дескриптор выходного файла задания на /dev/null, но я не знаю это. В любом случае программа все еще записала бы все те строки, они будут просто отброшены. Это поэтому только помогло бы, если дисплей терминала является узким местом, не поколением сообщения.

5
27.01.2020, 21:09
  • 1
    Спасибо! (1) Это на самом деле выводы к stderr вместо stdout. Мне также любопытно знать, как изменить вывод на /dev/null на лету. (2), Как я могу сказать, являются ли дисплей терминала или поколение сообщения узким местом к рабочей скорости программы? –  StackExchange for All 07.08.2012, 15:10
  • 2
    Взгляд на ответ Shawn. Что касается (2), необходимо было бы сделать некоторое кодирование для проверки. Партии и большой вывод могут действительно быть нагрузкой на основе моего опыта с одним проектом с открытым исходным кодом (мы отключили его для получения повышения порта андроида). –  lynxlynxlynx 07.08.2012, 16:06

Теги

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