Когда я выполняю двойное ответвление процесса, остается ли отсоединенный процесс в той же группе процессов?

Как упоминает Anthony Geoghegan , , Что такое «прошивка» в терминологии Linux? и Почему для некоторых драйверов по-прежнему требуется прошивка?обеспечивают полезную информацию.

Пакеты встроенного ПО — это пакеты, содержащие файлы встроенного ПО, т. е. файлы, которые содержат код, предназначенный для запуска на устройствах в вашей системе или подключенных к ней — общие примеры включают наборы микросхем Wi-Fi, как в вашем случае. Это не разовые -установщики, и им все равно, доступно ли оборудование. Файлы, которые они делают доступными, используются соответствующими драйверами ядра, если соответствующее оборудование присутствует :драйверы загружают прошивку в память, подключенную к целевому оборудованию, которое затем запускает прошивку для работы.

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

3
31.08.2020, 01:09
2 ответа

Быстрая двойная проверка в Google показывает это изman getpgrp:

https://linux.die.net/man/2/getpgrp

A child created via fork(2) inherits its parent's process group ID. The PGID is preserved across an execve(2).

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

3
18.03.2021, 23:08

Вы можете довольно легко найти ответ экспериментально. Я предполагаю, что под «двойной вилкой» вы подразумеваете только двойную вилку. Рассмотрим следующую программу:

#include <stdio.h>
#include <unistd.h>

int main(void)
{
    printf("original pid/pgid: %d/%d\n", getpid(), getpgrp());

    if (fork() != 0) { return 0; }
    printf("after first fork pid/pgid: %d/%d\n", getpid(), getpgrp());

    if (fork() != 0) { return 0; }
    printf("after second fork pid/pgid: %d/%d\n", getpid(), getpgrp());

    return 0;
}

Программа печатает идентификатор процесса и идентификатор группы процессов, разветвляется, дочерний процесс печатает его снова, снова разветвляется и дочерний процесс снова печатает его.

Пример запуска программы:

$./a.out
original pid/pgid: 7306/7306
after first fork pid/pgid: 7307/7306
after second fork pid/pgid: 7308/7306

Как видите, идентификатор группы процессов не меняется при разветвлении.

4
18.03.2021, 23:08

Теги

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