Articulo de referencia

inicial

Versión 7 Unix : listado de /etc , mostrando init y rc Versión 7 Unix: contenido de un script de shell Bourne /etc/rc En los sistemas operativos tipo Unix , init (abreviatura de...

Versión 7 Unix : listado de /etc , mostrando init y rc
Versión 7 Unix: contenido de un script de shell Bourne /etc/rc

En los sistemas operativos tipo Unix , init (abreviatura de inicialización ) es el primer proceso del espacio de usuario que se inicia durante el arranque del sistema operativo. Init es un proceso demonio que continúa ejecutándose hasta que se apaga el sistema. Es el antecesor directo o indirecto de todos los demás procesos y adopta automáticamente todos los procesos huérfanos . Init es iniciado por el núcleo durante el proceso de arranque ; en la mayoría de los sistemas tipo Unix, se producirá un pánico del núcleo si este no puede iniciarlo o si falla por cualquier motivo. A Init se le suele asignar el identificador de proceso 1.

En sistemas Unix como System III y System V , el diseño de init divergió de la funcionalidad proporcionada por init en Research Unix y sus derivados BSD . Hasta principios de la década de 2010, [ 1 ] la mayoría de las distribuciones de Linux empleaban un init tradicional que era algo compatible con System V, mientras que algunas distribuciones como Slackware usan scripts de inicio al estilo BSD, y otras distribuciones como Gentoo tienen sus propias versiones personalizadas. 

Desde entonces, la mayoría de las distribuciones de Linux han adoptado un sistema de inicio más moderno, principalmente el proporcionado por el proyecto systemd . Algunas distribuciones han optado por crear su propio sistema compatible con System V-init, como OpenRC de Gentoo Linux y runit de Void Linux . Estos proyectos suelen incluir características que originalmente no estaban presentes en System V-init, como la multihilo o el inicio interactivo. La mayoría de los sistemas de inicio modernos también pueden iniciar, detener y habilitar servicios dinámicamente después del arranque, con la intervención del usuario.

Investigación al estilo Unix/BSD

Research Unix init runs the initialization shell script located at /etc/rc,[2] then launches getty on terminals under the control of /etc/ttys.[3] There are no runlevels; the /etc/rc file determines what programs are run by init. The advantage of this system is that it is simple and easy to edit manually. However, new software added to the system may require changes to existing files that risk producing an unbootable system.

BSD init was, prior to 4.3BSD, the same as Research UNIX's init;[4][5] in 4.3BSD, it added support for running a windowing system such as X on graphical terminals under the control of /etc/ttys.[6][7] To remove the requirement to edit /etc/rc, BSD variants have long supported a site-specific /etc/rc.local file that is run in a sub-shell near the end of the boot sequence.

A fully modular system was introduced with NetBSD 1.5 and ported to FreeBSD 5.0, OpenBSD 4.9 and successors. This system executes scripts in the /etc/rc.d directory. Unlike System V's script ordering, which is derived from the filename of each script, this system uses explicit dependency tags placed within each script.[8] The order in which scripts are executed is determined by the rcorder utility based on the requirements stated in these tags.

SysV-style

sysv-rc-conf, a TUI utility that selects which SysV-style init scripts will be run in each runlevel

When compared to its predecessors, AT&T's UNIX System III introduced a new style of system startup configuration,[9] which survived (with modifications) into UNIX System V and is therefore called the "SysV-style init".

At any moment, a running System V is in one of the predetermined number of states, called runlevels. At least one runlevel is the normal operating state of the system; typically, other runlevels represent single-user mode (used for repairing a faulty system), system shutdown, and various other states. Switching from one runlevel to another causes a per-runlevel set of scripts to be run, which typically mount filesystems, start or stop daemons, start or stop the X Window System, shutdown the machine, etc.

Runlevels

Los niveles de ejecución en System  V describen ciertos estados de una máquina, caracterizados por los procesos y demonios que se ejecutan en cada uno de ellos. En general, existen siete niveles de ejecución, de los cuales tres se consideran "estándar", ya que son esenciales para el funcionamiento del sistema:

  1. Apagar
  2. Modo de usuario único (también conocido como S o s )
  3. Reiniciar

Aparte de estos niveles de ejecución estándar, los sistemas Unix y similares manejan los niveles de ejecución de forma algo diferente. El denominador común, el /etc/inittabarchivo, define la función de cada nivel de ejecución configurado en un sistema determinado.

niveles de ejecución predeterminados

En las distribuciones de Linux que utilizan por defecto el nivel de ejecución 5 en la tabla de la derecha, este nivel activa un entorno gráfico multiusuario que ejecuta el Sistema X Window , generalmente con un gestor de pantalla como GDM o KDM . Sin embargo, los sistemas operativos Solaris e illumos suelen reservar el nivel de ejecución 5 para apagar automáticamente el equipo.

En la mayoría de los sistemas, todos los usuarios pueden comprobar el nivel de ejecución actual con el comando runlevelo . [ 13 ] El usuario root normalmente cambia el nivel de ejecución actual ejecutando los comandos o . El archivo establece el nivel de ejecución predeterminado con la entrada.who -rtelinitinit/etc/inittab:initdefault:

En los sistemas Unix, el cambio de nivel de ejecución se logra iniciando únicamente los servicios que faltan (ya que cada nivel define solo aquellos que se inician o se detienen). Por ejemplo, cambiar un sistema del nivel de ejecución 3 al 4 podría implicar que solo se inicie el servidor X local. Al volver al nivel de ejecución 3, este se detendría de nuevo.

Otras implementaciones

Tradicionalmente, uno de los principales inconvenientes de `init` es que inicia las tareas de forma secuencial, esperando a que cada una termine de cargarse antes de pasar a la siguiente. Cuando los procesos de inicio se bloquean por problemas de entrada/salida (E/S), esto puede provocar largas demoras durante el arranque. Acelerar la E/S, por ejemplo, mediante el uso de unidades SSD, puede reducir las demoras, pero no soluciona la causa raíz.

Se han realizado diversos esfuerzos para reemplazar los demonios de inicialización tradicionales para abordar este y otros problemas de diseño, entre ellos:

General

  1. Scripts de arranque en GoboLinux
  2. busybox-init , adecuado para sistemas operativos embebidos , utilizado por Alpine Linux (antes de ser reemplazado por OpenRC ), SliTaz 5 (Rolling), Tiny Core Linux y VMware ESXi , y utilizado por OpenWrt antes de ser reemplazado por procd
  3. dinit, un gestor de servicios y sistema de inicio. [ 21 ]
  4. Epoch, un sistema de inicio de Linux de un solo hilo centrado en la simplicidad y la gestión de servicios [ 24 ]
  5. ginitd, un paquete de software que consta de un sistema de inicio y un sistema de gestión de servicios [ 26 ]
  6. Initng , un reemplazo completo de init diseñado para iniciar procesos de forma asíncrona
  7. launchd , un reemplazo para init en Darwin y sistemas operativos basados ​​en Darwin como macOS e iOS a partir de Mac OS X v10.4 (lanza SystemStarter para ejecutar procesos antiguos de 'rc.local' y SystemStarter)
  8. OpenRC , un generador de procesos que utiliza el init proporcionado por el sistema, a la vez que proporciona aislamiento de procesos, inicio paralelo y dependencia de servicios; utilizado por Alpine Linux , Gentoo y sus derivados, y disponible como opción en Devuan y Artix Linux .
  9. runit , un reemplazo completo multiplataforma para init con inicio paralelo de servicios, utilizado por defecto en Void Linux [ 35 ]
  10. s6, un conjunto de software que incluye un sistema de inicio [ 38 ] [ 39 ]
  11. Service Management Facility (SMF), un reemplazo/rediseño completo de init desde cero en illumos / Solaris a partir de Solaris 10, pero lanzado como el único servicio por el init original de estilo System V.
  12. Shepherd , el gestor de servicios y demonios de GNU que proporciona una inicialización asíncrona basada en dependencias; escrito en Guile Scheme y diseñado para ser manipulable interactivamente durante el funcionamiento normal del sistema [ 43 ].
  13. systemd , un conjunto de software que reemplaza por completo a init en Linux e incluye un demonio init, con inicio concurrente de servicios, gestor de servicios y otras características. Utilizado por Debian (reemplaza a SysV init) y Ubuntu , entre otras distribuciones populares de Linux. A partir de febrero de 2019, systemd ha sido adoptado por la mayoría de las principales distribuciones de Linux. [ 49 ]
  14. SystemStarter , un generador de procesos iniciado por el init de estilo BSD en Mac OS X anterior a Mac OS X v10.4
  15. Upstart , un reemplazo completo de init diseñado para iniciar procesos de forma asíncrona. Iniciado por Ubuntu y utilizado por ellos hasta 2014. También se utilizó en Fedora 9, [ 52 ] [ 53 ] Red Hat Enterprise Linux 6 [ 54 ] y ChromeOS de Google . [ 55 ]

Soporte del sistema operativo

Compatibilidad, interfaz y programación

Véase también

Referencias

  1. "Lennart Poettering sobre el tumultuoso ascenso de systemd" . The New Stack . 8 de noviembre de 2018. Archivado del original el 8 de noviembre de 2018. Consultado el 30 de enero de 2024 .
  2. Manual del programador de Unix, versión 7init(8)  
  3. Manual del programador de Unix, versión 7ttys(5)  
  4. Manual del administrador del sistema 4.2BSDinit(8)  
  5. Manual de formatos de archivo de 4.2BSDttys(5)  
  6. Manual del administrador del sistema 4.3BSDinit(8)  
  7. Manual de formatos de archivo de 4.3BSDttys(5)  
  8. Andrew Smallshaw (7 de diciembre de 2009). "Scripts de inicio de Unix y Linux, Parte 2" . Archivado del original el 18 de diciembre de 2009. Recuperado el 6 de junio de 2011 .
  9. "init(8)" . minnie.tuhs.org . Archivado del original el 27-07-2021 . Recuperado el 12-09-2015 .
  10. "Nivel de ejecución del sistema" . IBM . Archivado del original el 26 de marzo de 2026. Consultado el 26 de marzo de 2026 .
  11. "Initscripts" . Documentación de Gentoo Linux . Gentoo.org. 13 de diciembre de 2014. Archivado del original el 3 de diciembre de 2020. Consultado el 8 de diciembre de 2020 .
  12. "Niveles de ejecución" . Administración de Oracle Solaris: Tareas comunes . Oracle . Archivado del original el 10 de abril de 2016. Consultado el 14 de noviembre de 2017 .
  13. "Páginas man de UNIX : runlevel (8)" . Unixhelp.ed.ac.uk. 27 de mayo de 1997. Archivado del original el 14 de julio de 2014. Consultado el 12 de julio de 2014 . 
  14. 1 2 3 "gobolinux/Scripts: 🧰 La colección de scripts de GoboLinux" . GitHub . Consultado el 25 de abril de 2026 .
  15. "Página web de Erik Andersen" . Archivado del original el 13 de junio de 2010. Consultado el 23 de diciembre de 2009 .
  16. Proyectos activos archivados el 29 de julio de 2010 en Wayback Machine , el sitio web de Rob Landley.
  17. Denys Vlasenko Archivado el 5 de septiembre de 2017 en Wayback Machine , mantenedor de BusyBox
  18. "BusyBox 1.36.1 (estable)" .
  19. "Licencia" . Archivado del original el 24 de febrero de 2018. Recuperado el 23 de febrero de 2018 .
  20. "Registro de cambios de BusyBox 1.2.2.1" (Documento). BusyBox. Esta es la última versión de BusyBox bajo la antigua licencia dual 'GPLv2 o posterior'. Las versiones futuras (que contengan cambios posteriores a svn 16112) solo tendrán licencia GPLv2, sin la indicación 'o posterior'.
  21. 1 2 3 "GitHub - davmac314/dinit: Monitoreo de servicio / sistema "init" . GitHub . Archivado del original el 12-12-2021 . Recuperado el 12-12-2021 .
  22. "Versión 0.22.1" . 4 de julio de 2026. Consultado el 14 de julio de 2026 .
  23. "GitHub - Subsentient/epoch: El sistema de inicio de Epoch" . GitHub . Consultado el 25 de abril de 2026 .
  24. "Página principal del sistema de inicio de Epoch" . Archivado del original el 2 de agosto de 2014. Consultado el 31 de julio de 2014 .
  25. 1 2 "GitHub - finit-project/finit: Inicialización rápida para Linux. Cookies incluidas" . GitHub . Consultado el 25 de abril de 2026 .
  26. ^ Wood-Mattheusson, SM (16 de diciembre de 2024) . "ginitd: el sistema de init eficaz" .
  27. 1 2 "initng/initng: Componentes principales de InitNG" . GitHub . Consultado el 25 de abril de 2026 .
  28. "rsmarples (Roy Marples)" . GitHub . Consultado el 30 de abril de 2026 .
  29. "GitHub - OpenRC/openrc: El sistema de inicio de OpenRC" . GitHub . Consultado el 30 de abril de 2026 .
  30. "Versión 0.63.3" . 2 de julio de 2026. Consultado el 3 de julio de 2026 .
  31. "GitHub - openwrt/procd: [ MIRROR ] Administrador de procesos/servicios de OpenWrt" . GitHub . Consultado el 25 de abril de 2026 .
  32. "g-pape" . GitHub . Consultado el 30 de abril de 2026 .
  33. "GitHub - g-pape/runit: un esquema de inicio UNIX con supervisión de servicios" . GitHub . Consultado el 30 de abril de 2026 .
  34. "Versión 2.3.1" . 7 de febrero de 2026. Consultado el 25 de abril de 2026 .
  35. "Página principal de Void Linux" . Archivado del original el 29/08/2020 . Consultado el 31/08/2020 .
  36. «skarnet/s6» . GitHub . Consultado el 25 de abril de 2026 .
  37. "Versión 2.15.1.0" . 14 de julio de 2026. Consultado el 14 de julio de 2026 .
  38. "s6: por qué otra suite de supervisión" . Archivado del original el 13 de septiembre de 2021. Consultado el 13 de septiembre de 2021 .
  39. "Sistema de inicio s6" . Archivado del original el 13 de septiembre de 2021.
  40. "Proyecto de código abierto GNU Shepherd en Open Hub: Colaborador Ludovic Courtès" . Open Hub . Consultado el 25 de abril de 2026 .
  41. "Proyecto de código abierto GNU Shepherd en Open Hub: Colaboradores" . Open Hub . Consultado el 25 de abril de 2026 .
  42. Ludovic Courtès (3 de diciembre de 2025). "GNU Shepherd 1.0.9 lanzado" . Consultado el 3 de diciembre de 2025 .
  43. "The Shepherd - Proyecto GNU" . Free Software Foundation, Inc. Archivado del original el 12 de febrero de 2016. Consultado el 16 de enero de 2016 .
  44. "systemd README" , freedesktop.org , archivado del original el 7 de julio de 2013 , consultado el 9 de septiembre de 2012.
  45. "Systemd alcanza un máximo histórico en cuanto al número de nuevas confirmaciones y colaboradores durante 2018 - Phoronix" . Archivado del original el 21 de septiembre de 2009. Consultado el 30 de diciembre de 2018 .
  46. Se utilizó la estadística "contributors" de: systemd/systemd , systemd, 2023-12-03 , consultado el 2023-12-03.
  47. "systemd-stable v261.1" . 26 de junio de 2026. Consultado el 27 de junio de 2026 .
  48. Poettering, Lennart (21 de abril de 2012), Actualización de estado de systemd , archivado del original el 23 de abril de 2012 , recuperado el 28 de abril de 2012
  49. Ver Systemd#Adoption
  50. Wilfredo Sanchez (28 de mayo de 2001). "Resumen de la WWDC" . Nombre ingenioso por determinar . Archivado del original el 11 de marzo de 2007. Consultado el 23 de diciembre de 2006 .
  51. "1.13.2 "Se ve exuberante desde el lateral" : Serie 1.x : advenedizo" . Launchpad . Consultado el 1 de enero de 2022 .  
  52. Fedora 14 Características aceptadas , 13/07/2010, archivado del original el 27/03/2022 , recuperado el 13/07/2010
  53. "Fedora pospone systemd a F15" . Linux Weekly News. 14 de septiembre de 2010. Archivado del original el 19 de septiembre de 2010. Consultado el 17 de septiembre de 2010 .
  54. "Implementación" . Red Hat Enterprise Linux 6: Notas técnicas . Red Hat . Archivado del original el 29/08/2018 . Consultado el 31/12/2013 .
  55. Arquitectura de software: Documentos de diseño de Chromium OS , archivados del original el 9 de abril de 2022 , consultados el 25 de enero de 2014.
  56. 1 2 "systemdfree.com — Porque tu init debería hacer una sola cosa" . Recuperado el 25/04/2026 . A partir de 2024, el proyecto systemd abarca: un demonio init, un administrador de servicios, un administrador de inicio de sesión (logind), un resolvedor DNS (systemd-resolved), un demonio de sincronización horaria (systemd-timesyncd), un administrador de red (systemd-networkd), un cargador de arranque (systemd-boot), un administrador de directorio personal (systemd-homed), un administrador de credenciales, un administrador de contenedores (systemd-nspawn), un sistema de registro binario journal (journald), un administrador de dispositivos (udev, absorbido en 2012) y una capa de criptografía para almacenamiento cifrado. Estos no son complementos. Son componentes profundamente acoplados que comparten API internas, interfaces dbus y jerarquías cgroup. [...] La dependencia de GNOME de logind, la integración de NetworkManager con systemd-networkd y la sustitución de PulseAudio por PipeWire, que también se integra profundamente con la gestión de sesiones de systemd.
  57. "Comparación de sistemas de inicio - Wiki de Gentoo" . 16 de septiembre de 2025. Consultado el 25 de abril de 2026 .
  58. 1 2 "El proyecto de código abierto BusyBox en Open Hub: Página de idiomas" . Open Hub . Consultado el 14 de julio de 2026 .
  59. 1 2 "El proyecto de código abierto Epoch Init System en Open Hub: Página de idiomas" . Open Hub . Consultado el 25 de abril de 2026 .
  60. 1 2 "El proyecto de código abierto finit en Open Hub: Página de idiomas" . Open Hub . Consultado el 14 de julio de 2026 .
  61. 1 2 "El proyecto de código abierto InitNG en Open Hub: Página de idiomas" . Open Hub . Consultado el 25 de abril de 2026 .
  62. 1 2 "El proyecto de código abierto Open launchd en Open Hub: Página de idiomas" . Open Hub . Consultado el 25 de abril de 2026 .
  63. 12"The OpenRC Open Source Project on Open Hub: Languages Page". Open Hub. Retrieved 2026-07-14.
  64. 12stokito (2025-11-18). "[OpenWrt Wiki] The UCI system". Retrieved 2026-04-25.
  65. bluewavenet (2025-02-18). "[OpenWrt Wiki] Procd system init and daemon management". Retrieved 2026-04-25.
  66. 12"The openwrt-procd Open Source Project on Open Hub: Languages Page". Open Hub. Retrieved 2026-07-14.
  67. 12"The runit Open Source Project on Open Hub: Languages Page". Open Hub. Retrieved 2026-04-25.
  68. 12"The s6 Open Source Project on Open Hub: Languages Page". Open Hub. Retrieved 2026-07-14.
  69. 12"The GNU Shepherd Open Source Project on Open Hub: Languages Page". Open Hub. Retrieved 2026-04-25.
  70. 12"The systemd Open Source Project on Open Hub: Languages Page". Open Hub. Retrieved 2026-07-14.
  71. 12"The Upstart Open Source Project on Open Hub: Languages Page". Open Hub. Retrieved 2026-04-25.
  • FreeBSD init man page
  • A paper summarizing Unix init schemes (2007)
  • Solaris Service Management Facility - Quickstart Guide at the Wayback Machine(archived December 31, 2005)
  • A history of modern init systems (19922015)Archived 2015-10-11 at the Wayback Machine