Как упоминает Anthony Geoghegan , , Что такое «прошивка» в терминологии Linux? и Почему для некоторых драйверов по-прежнему требуется прошивка?обеспечивают полезную информацию.
Пакеты встроенного ПО — это пакеты, содержащие файлы встроенного ПО, т. е. файлы, которые содержат код, предназначенный для запуска на устройствах в вашей системе или подключенных к ней — общие примеры включают наборы микросхем Wi-Fi, как в вашем случае. Это не разовые -установщики, и им все равно, доступно ли оборудование. Файлы, которые они делают доступными, используются соответствующими драйверами ядра, если соответствующее оборудование присутствует :драйверы загружают прошивку в память, подключенную к целевому оборудованию, которое затем запускает прошивку для работы.
Эти пакеты прошивки не связаны с установщиками прошивки, о которых вы думаете, которые загружают обновления прошивки во флэш-память (, что необходимо делать только тогда, когда требуется обновление ). Этот процесс действительно длительный, часто сложный и кажется опасным (, по крайней мере, если основывать свои впечатления на предупреждениях производителя ). Пакеты микропрограмм, включенные в дистрибутивы Linux, содержат микропрограмму, которая требуется каждый раз при загрузке системы, поскольку она загружается в энергозависимую память.
Быстрая двойная проверка в 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).
Другими словами, группа процессов каждого потомка автоматически совпадает с родительской. Таким образом, внуки по умолчанию будут использовать одну и ту же группу процессов.
Вы можете довольно легко найти ответ экспериментально. Я предполагаю, что под «двойной вилкой» вы подразумеваете только двойную вилку. Рассмотрим следующую программу:
#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
Как видите, идентификатор группы процессов не меняется при разветвлении.