Родительский процесс не выполняет действие по умолчанию после получения SIGINT

Размер файловой системы, используемый дляresize2fsmke2fsи других подобных инструментов ), представляет собой внешний размер файловой системы, т. е. количество места, которое она занимает как просматривается снаружи.Внутренние структуры данных файловой системы здесь не имеют значения. Все в файловой системе — метаданные, данные и неиспользуемое пространство в файловой системе — укладывается в размер файловой системы. Сюда же относится любой загрузчик, размещенный в том же разделе, что и файловая система, где возможна такая конфигурация (это с Ext2/3/4 , а не с XFS, например ).

Лучший способ определить текущий размер файловой системы — прочитать его из файловой системы; например, для файловых систем ext2/3/4 вы должны умножить количество блоков на размер блока :

.

dumpe2fs -h /path/to/file/system | grep -E 'Block (count|size):'

По умолчанию размер файловой системы обычно равен размеру ее контейнера, например. содержащий его раздел или логический том. Это значение, которое resize2fsбудет использовать, если вы не укажете размер явно. Указание sizeполезно, когда вы хотите сжать файловую систему и ее контейнер :, вы должны начать с запуска resize2fsс целевым размером, а затем сжать контейнер (, раздел, логический том и т. д. )для соответствия.

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

resize2fs -M -P /path/to/file/system

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

dumpe2fs -h /path/to/file/system | grep Block\ size

Подробную информацию о расчете можно получить, добавив-d 32:

resize2fs -d 32 -M -P /path/to/file/system

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

2
19.12.2019, 13:08
1 ответ

Это происходит из-за «Ожидания и совместного выхода»(WCE ), который bashреализует.

Когда bash получает сигнал SIGINTво время ожидания дочернего элемента, он уничтожит себя только в том случае, если дочерний элемент умер из-за этого сигнала, а не в случае выхода дочернего элемента. Родительский процесс может определить по статусу выхода дочернего процесса, завершился ли он или умер из-за необработанного сигнала --, см. макросы WIF*на странице руководства wait(2).

Более простой пример:

bash -c 'sh -c "trap exit INT; read p"; echo DONE'
<ctrl-C>
DONE

И с оболочкой dash, которая не реализует WCE:

dash -c 'sh -c "trap exit INT; read p"; echo DONE'
<ctrl-C>
<no DONE, parent script was killed outright>

См. аналогичные вопросы и ответы и кладж , которые я предложил в качестве работы -.

3
27.01.2020, 22:02

Теги

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