В чем разница между расположением по умолчанию для SIGCHLD и явным заданием расположения для SIG _IGN?

BEGIN { FS = "," }

FNR == NR {
    if (seen[$2,$3,$4])
        delete lines[seen[$2,$3,$4]]

    lines[FNR]
    seen[$2,$3,$4] = FNR

    next
}

FNR in lines

Эта awkпрограмма предполагает дважды прочитать один и тот же файл. При первом чтении файла выполняется только блок FNR == NR. Это запоминает, как ключи в массиве lines, какие номера строк выводить. Если строка с определенной комбинацией 2-го, 3-го и 4-го столбцов уже была просмотрена, номер самой последней строки вставляется в качестве ключа, а предыдущий удаляется (оператором delete.

Во время второго синтаксического анализа файла происходит только поиск текущего номера строки в массиве lines. Если он найден, строка печатается.

Пример запуска с «одной -лайнером» версии того же кода:

$ awk -F, 'FNR==NR { if(s[$2,$3,$4]) delete l[s[$2,$3,$4]]; l[FNR]; s[$2,$3,$4]=FNR; next}; FNR in l' file file
"2018-12-07 23:29:05",DD,11,AAA,250,REMOVED
"2018-12-07 23:30:00",CH,00,UUU,250,REMOVED
"2018-12-07 23:31:45",MM,33,OOO,250,REMOVED
"2018-12-07 23:46:41",XX,99,ZZZ,250,REMOVED
0
08.12.2020, 18:59
1 ответ

Explicitly setting the disposition of SIGCHLD to SIG_IGN causes any child process that subsequently terminates to be immediately removed from the system instead of being converted into a zombie.

Расположение по умолчанию приводит к тому, что дочерние процессы становятся зомби при выходе до тех пор, пока не будет получен их статус выхода. Установка SIGCHLDна SIG_IGNуказывает, что родительский не заботится о своих дочерних кодах выхода, и они пожинаются сразу при выходе.

1
18.03.2021, 22:44

Теги

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