Какова причина выполнения двойного ветвления при создании демона?

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

Рассмотрим этот пример: https://jsfiddle.net/8kh9j7wx/1/

Видео всегда будет находиться в пределах родительского элемента и всегда будет сохранить 100% ширину указанного элемента, сохраняя при этом очень важное соотношение сторон, на которое другие ответы здесь не в состоянии ответить.

Вот ваша измененная разметка:

Вот ваш CSS:

.video-container {
    overflow:hidden;
    padding-bottom:56.25%;
    position:relative;
    height:0;
}
.video-container iframe{
    left:0;
    top:0;
    height:100%;
    width:100%;
    position:absolute;
}

Вы можете, конечно, ограничьте ширину до максимума, объявив max-width на вашем элементе контейнера, и отцентрируйте его, используя margin:auto.

156
задан codeforester 28 August 2018 в 03:29
поделиться

6 ответов

Если посмотреть на код, упомянутый в вопросе, оправдание таково:

Вилка второго дочернего элемента и немедленный выход, чтобы предотвратить зомби. это приводит к тому, что второй дочерний процесс становится сиротским, что делает init процесс, отвечающий за его очистку. А поскольку первый ребенок лидер сеанса без управляющего терминала, возможно его приобрести, открыв терминал в будущем (Система V- на базе систем). Эта вторая вилка гарантирует, что ребенок не дольше лидера сеанса, не позволяя демону когда-либо получать управляющий терминал.

Таким образом, это необходимо для того, чтобы демон был повторно привязан к init (на тот случай, если процесс, запускающий демона, будет долгим), и исключает любой шанс того, что демон повторно получит управляющий терминал. Так что, если ни один из этих случаев не подходит, одной вилки должно быть достаточно. В " Сетевое программирование Unix - Стивенс " есть хороший раздел по этому поводу.

101
ответ дан 23 November 2019 в 21:49
поделиться

Согласно «Расширенному программированию в среде Unix» Стивенса и Раго, вторая вилка является скорее рекомендацией, и это сделано чтобы гарантировать, что демон не получит управляющий терминал в системах на основе System V.

7
ответ дан 23 November 2019 в 21:49
поделиться

Одна из причин заключается в том, что родительский процесс может немедленно wait_pid () для дочернего, а затем забыть об этом. Когда тогда умирает внучатый ребенок, его родителем является init, и он будет wait () для него - и вывести его из состояния зомби.

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

3
ответ дан 23 November 2019 в 21:49
поделиться

Приличное обсуждение этого вопроса, похоже, находится на http://www.developerweb.net/forum/showthread.php?t=3025

Цитата из mlampkin оттуда:

... думайте о вызове setsid () как о "новом" способ сделать что-то (отделиться от терминала) и [второй] вызов fork () после него как избыточность для работы с SVr4 ...

2
ответ дан 23 November 2019 в 21:49
поделиться

У вызова daemon () есть родительский вызов _exit (), если он завершается успешно. Первоначальная мотивация могла заключаться в том, чтобы позволить родителю выполнять некоторую дополнительную работу, пока дочерний процесс демонизируется.

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

Так что я полагаю, что в конечном итоге все сводится к традиции - единственной вилки достаточно, пока родитель все равно умирает в короткие сроки.

2
ответ дан 23 November 2019 в 21:49
поделиться

Взято из Bad CTK :

«В некоторых версиях Unix вы вынуждены выполнять двойной форк при запуске, чтобы перейти в режим демона. . Это потому, что одиночное разветвление не гарантирует отсоединение от управляющего терминала. "

11
ответ дан 23 November 2019 в 21:49
поделиться
Другие вопросы по тегам:

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