Поиск и замена в определенном столбце

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

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

Если один из потоков процесса в настоящее время запланирован на другом ЦП, ядро ​​может инициировать прерывание на этом другом ЦП, чтобы остановить выполнение этого потока быстрее.

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

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

Некоторые ресурсы могут быть освобождены немедленно (, например. освобождение памяти, которая не используется операцией ввода-вывода ). Другие ресурсы должны ожидать, например, данные, описывающие операцию ввода-вывода, не могут быть освобождены, пока выполняется операция ввода-вывода (, пока выполняется DMA , память, к которой осуществляется доступ, используется, и для отмены прямого доступа к памяти требуется обращение к периферийному устройству ). Водитель такого ресурса уведомляется и может попытаться ускорить отмену; как только операция больше не выполняется, драйвер завершит освобождение этого ресурса.

(Запись в таблице процессов на самом деле является ресурсом, принадлежащим родительскому процессу, который освобождается, когда процесс умирает и родительский процесс подтверждает событие .)

2
08.08.2019, 16:47
1 ответ

/usr/bin/awkв Solaris сильно ограничен в поддержке различных функций. В частности, функция gsub()не реализована. Это объясняется в руководстве для awkна Solaris .

Для этого вы должны использовать/usr/xpg4/bin/awk(или nawk, "новый awk" ).

В вашем коде также не указан разделитель полей для awk, поэтому $3никогда ничего не будет содержать, если в ваших данных не окажется достаточно пробелов, чтобы случайно создать третье поле, разделенное пробелами. Точно так же вы не указываете разделитель выходных полей, поэтому любые измененные строки будут иметь свои поля, разделенные пробелами.

Вместо:

/usr/xpg4/bin/awk -F '|' 'BEGIN { OFS=FS } { gsub(",", "|", $3); print }' file

Чтобы всегда получать /usr/xpg4/bin/awkв качестве awkпо умолчанию в Solaris, используйте PATH="$(/usr/xpg4/bin/getconf PATH):$PATH"в файле запуска вашей оболочки.

2
27.01.2020, 22:08

Теги

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