Отправляет ли Linux `SIGCHLD` в `init`, когда он наследует осиротевшие зомби-процессы?

A partir de los archivos de entrada y salida proporcionados, se supone que los datos están estructurados de la siguiente manera:

cat -n FROM_DATE
     1  20190105
     2  20171124
cat -n TO_DATE
     1  20190112
     2  20171201

donde la fecha tiene el formato deYYYYmmdd(y fue, por ejemplo, creado a través dedate +%Y%m%d).

Para tener una mejor idea de cómo se ve agregado, imprimamos los dos archivos lado -por -lado .

pr -m -J -t FROM_DATE TO_DATE
20190105        20190112
20171124        20171201

Entonces, parece que la pregunta es más sobre "¿Cómo expandir el rango de valores que se dividen en dos archivos y tener el resultado agregado?".

Siguiendo las sugerencias del comentario de @steeldriver y la respuesta de @Nortole,una posible solución podría verse como:

#!/bin/bash
while read -r START_DATE && read -r END_DATE <&3; do

echo $START_DATE

    for (( DATE="${START_DATE}"; DATE != END_DATE; )); do
        DATE="$(date --date="${DATE} + 1 days" +'%Y%m%d')"
        echo $DATE # which will be equals to END_DATE at the end
    done

done < FROM_DATE 3

Ejecutar el script dará el resultado esperado:

20190105
20190106
20190107
20190108
20190109
20190110
20190111
20190112
20171124
20171125
20171126
20171127
20171128
20171129
20171130
20171201

2
14.06.2019, 20:02
1 ответ

Ага. Я проверил это. И вы можете увидеть, где это происходит в коде Linux .


Тест :Запустить вложенную оболочку. Откуда-то еще, kill -s STOPродительская оболочка. Затем kill -s KILLдочерняя оболочка, а затем родительская.

Примечание:

Если вы попробуете это внутри gnome-terminal, например, жатка не будет иметь PID 1. Это будет подчиненная -жатка, процесс systemd --user.

Кроме того, systemdобрабатывает сигналы с помощью signalfd. Поэтому, когда вы запускаете strace -pв процессе systemd, вы не увидите полученный сигнал. Вместо этого вы увидите, что systemd просыпается от epoll _wait ()и выполняет чтение ()файлового дескриптора.

Вы можете подтвердить, что номер файлового дескриптора является signalfd, используя ls -l /proc/<PID>/fd/<FD>. Там будет написано anon_inode:[signalfd].

2
27.01.2020, 22:17

Теги

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