подпроцесс pnmtops зависает при вызове из scanadf сценария

Существует простой, систематический и совместимый POSIX способ заключить любую строку в кавычки. Только необходимо помнить два правила:

  1. Апострофы кавычки (одинарные кавычки) с обратной косой чертой как так: \'
  2. Заключите все в кавычки кроме апострофов путем окружения его апострофами как так: 'printf "foo\n"'

Проиллюстрировать, как использовать эти правила вместе, слово don't может систематически заключаться в кавычки как это: 'don'\''t'

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

Заключенная в кавычки форма строки в вопросе:

$ echo 'cat file2.txt  | sed '\''s/"//g'\'' > file3.txt ## Step 2 ' >> ~/globalLog.txt
1
03.10.2013, 09:25
1 ответ

От Bryan Henderson, специалиста по обслуживанию netpbm:

Я нашел и исправил ошибку, которая вызывает этот признак. [...] фиксация находится в Netpbm 10.64.02.

Различие в среде, которая заставляет Pnmtops иногда зависать и иногда не является количеством открытых файлов. Если существует больше чем 10 открытых файлов, когда Pnmtops вызывается, подвешивание происходит.

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

Это означает, что ребенок должен закрыть его копию передающего конца канала, который подает его. Чтобы сделать это и решить некоторые другие подобные проблемы, дочерние попытки запуска для закрытия каждого дескриптора файла помимо двух, это на самом деле использует. Но POSIX не позволяет знать список открытых дескрипторов файлов, таким образом, ребенок просто вслепую закрывается 0-9 (исключая два, ему нужно), зная, что Pnmtops не использовал бы больше файлов, чем это. Ошибка состояла в том, что программа не составляла дескрипторы файлов, процесс терпелся. Фиксация - чтобы Pnmtops закрыл дескрипторы файлов 0-9, когда он запускает, так, чтобы любые каналы, которые он создает, имели числа дескриптора файла в диапазоне 0-9 и таким образом закрываться слепыми завершение 0-9.

0
28.01.2020, 02:03

Теги

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