Linux 进程的启动方式

合集下载

Linux的启动过程及init进程

Linux的启动过程及init进程

Linux的启动过程及init进程Linux下有三个特殊进程:idle进程(pid=0)idle进程其前⾝是系统创建的第⼀个进程,0号进程,也唯⼀⼀个没有通过fork()或者kernel_thread产⽣的进程,由系统⾃动创建,运⾏在内核态。

0号进程在创建了init进程后,演变成为idle进程。

主处理器上的idle进程是由原始进程(0号进程)演变⽽来,从处理器上的idle进程是由init进程fork得到的,pid也为0。

idle进程的优先级最低,不参与调度,只有在运⾏队列为空时才调度。

init进程(pid=1)init进程由0号进程创建,完成系统的初始化,是第⼀个⽤户进程,是其他所有⽤户进程的⽗进程。

kthreadd进程(pid=2)kthreadd进程由idle通过kernel_thread创建,始终运⾏在内核空间,负责内核进程的调度和管理。

init进程⼀开始是内核态,然后在运⾏了⼀个⽤户态的init程序之后,转成⽤户态,之后只能在⽤户态⼯作。

⽤户想要进⼊内核态只能通过调⽤API。

init进程要把⾃⼰转换成⽤户态,就需要运⾏⼀个⽤户态的应⽤程序(init程序),需要运⾏这个程序就需要找到这个程序,需要找到这个程序就需要挂载根⽂件系统,因为所有的应⽤程序都在⽂件系统中。

所以,需要先挂载根⽂件系统,并找到⽤户态下的init程序。

Linux中的所有进程都是由init进程创建并运⾏的。

⾸先Linux内核启动,然后在⽤户空间中启动init进程,再启动其他进程。

在系统启动完成后,init进程将变成守护进程监视系统的其他进程。

init启动了login进程(⽤户登录进程),命令⾏进程(提供命令⾏环境),shell进程(提供命令解释和执⾏)其中,shell进程是⽤户登录后运⾏的第⼀个程序。

运⾏级别:0 关机1 单⽤户2 多⽤户,会启动⽹络功能,但不会启动NFS,是维护模式3 多⽤户4 不使⽤,预留5 图形化界⾯6 重启emergency 急救模式直接使⽤init+运⾏级别在centos7中,init进程是systemed进程;在centos6中是upstart进程;在centos5中是init进程,在unbuntu中是init进程。

嵌入式linux系统的启动流程

嵌入式linux系统的启动流程

嵌入式linux系统的启动流程
嵌入式Linux系统的启动流程一般包括以下几个步骤:
1.硬件初始化:首先会对硬件进行初始化,例如设置时钟、中
断控制等。

这一步骤通常是由硬件自身进行初始化,也受到系统的BIOS或Bootloader的控制。

2.Bootloader引导:接下来,系统会从存储介质(如闪存、SD
卡等)的Bootloader区域读取引导程序。

Bootloader是一段程序,可以从存储介质中加载内核镜像和根文件系统,它负责进行硬件初始化、进行引导选项的选择,以及加载内核到内存中。

3.Linux内核加载:Bootloader会将内核镜像从存储介质中加载到系统内存中。

内核镜像是包含操作系统核心的一个二进制文件,它由开发者编译并与设备硬件特定的驱动程序进行连接。

4.内核初始化:一旦内核被加载到内存中,系统会进入内核初
始化阶段。

在这个阶段,内核会初始化设备驱动程序、文件系统、网络协议栈等系统核心。

5.启动用户空间:在内核初始化完毕后,系统将启动第一个用
户空间进程(init进程)。

init进程会读取并解析配置文件(如
/etc/inittab)来决定如何启动其他系统服务和应用程序。

6.启动其他系统服务和应用程序:在用户空间启动后,init进
程会根据配置文件启动其他系统服务和应用程序。

这些服务和应用程序通常运行在用户空间,提供各种功能和服务。

以上是嵌入式Linux系统的基本启动流程,不同的嵌入式系统可能会有一些差异。

同时,一些特定的系统也可以添加其他的启动流程步骤,如初始化设备树、加载设备固件文件等。

linux execstart 参数

linux execstart 参数

linux execstart 参数Linux操作系统是当前广泛使用的操作系统之一,它提供了许多强大的工具和功能,其中包括进程管理。

在Linux中,进程可以通过多种方式启动和终止,其中execstart参数是进程启动的一种重要方式。

execstart参数是在systemd单元文件中用于指定启动命令的参数。

本文将介绍execstart参数的基本概念、常见参数、注意事项以及一些示例。

一、execstart参数的基本概念execstart参数用于指定在系统启动时执行的命令。

它通常是一个字符串,其中包含要执行的命令及其所需的参数。

在systemd单元文件中,execstart参数的值通常是一个shell脚本或可执行文件。

当系统启动时,systemd将执行该命令,并启动相应的进程。

1.命令参数:execstart参数可以直接指定要执行的命令及其参数。

例如,/bin/bash-l-c"命令内容"。

2.环境变量:通过设置环境变量,可以影响要执行的命令的行为。

例如,设置PATH环境变量可以指定可执行文件所在的路径。

3.自定义启动脚本:在execstart参数中指定一个自定义的启动脚本,可以方便地管理和配置要执行的命令。

三、注意事项1.命令路径:确保指定的可执行文件路径正确,并且该文件存在。

2.权限要求:确保执行该命令的用户具有足够的权限。

3.错误处理:在启动命令中添加适当的错误处理逻辑,以便在出现错误时能够进行适当的处理。

4.系统依赖:某些命令或参数可能受到特定版本或特定系统配置的影响。

四、示例以下是一个systemd单元文件的示例,其中使用了execstart参数来启动一个简单的shell脚本:[Unit]Description=ExampleServiceAfter=network.target[Service]Type=simpleExecStart=/bin/bash-l-c"/path/to/script.sh"Restart=always在这个示例中,ExecStart参数指定了一个bashshell脚本作为要执行的命令,该脚本将启动另一个脚本(/path/to/script.sh)。

arm版本linux系统的启动流程

arm版本linux系统的启动流程

arm版本linux系统的启动流程ARM架构是一种常见的处理器架构,被广泛应用于嵌入式设备和移动设备中。

在ARM版本的Linux系统中,启动流程是非常重要的,它决定了系统如何从开机到正常运行。

本文将详细介绍ARM版本Linux系统的启动流程。

一、引导加载程序(Bootloader)引导加载程序是系统启动的第一阶段,它位于系统的固化存储器中,比如ROM或Flash。

在ARM版本的Linux系统中,常用的引导加载程序有U-Boot和GRUB等。

引导加载程序的主要功能是加载内核镜像到内存中,并将控制权转交给内核。

二、内核初始化引导加载程序将内核镜像加载到内存后,控制权被转交给内核。

内核初始化是系统启动的第二阶段,它主要完成以下几个步骤:1. 设置异常向量表:ARM架构中,异常是指硬件产生的中断或故障,比如系统调用、中断请求等。

内核需要设置异常向量表,以便正确处理异常。

2. 初始化处理器:内核对处理器进行初始化,包括设置页表、启用缓存、初始化中断控制器等。

3. 启动第一个进程:内核创建第一个用户进程(一般是init进程),并将控制权转交给它。

init进程是系统中所有其他进程的父进程,负责系统的初始化工作。

三、设备树(Device Tree)设备树是ARM版本Linux系统中的一种机制,用于描述硬件设备的相关信息。

在内核初始化过程中,内核会解析设备树,并建立设备树对象,以便后续的设备驱动程序使用。

设备树描述了硬件设备的类型、地址、中断等信息,以及设备之间的连接关系。

它使得内核能够在运行时自动识别和配置硬件设备,大大提高了系统的可移植性和灵活性。

四、启动初始化(Init)启动初始化是系统启动的第三阶段,它是用户空间的第一个进程(init进程)接管系统控制权后的操作。

启动初始化主要完成以下几个任务:1. 挂载根文件系统:启动初始化会挂载根文件系统,使得用户可以访问文件系统中的文件和目录。

2. 加载系统服务:启动初始化会加载并启动系统服务,比如网络服务、日志服务、时间同步服务等。

Linux系统服务启动顺序Shell脚本

Linux系统服务启动顺序Shell脚本

Linux系统服务启动顺序Shell脚本在Linux操作系统中,有许多系统服务需要在启动时按照一定的顺序进行启动。

为了确保这些服务能够正确地依赖关系启动,我们可以使用Shell脚本来管理它们的启动顺序。

本文将介绍一种用Shell脚本来实现Linux系统服务启动顺序的方法。

一、背景介绍在Linux系统中,服务是一种在后台运行的程序,用于提供特定功能或服务。

在系统启动时,许多服务需要按照一定的顺序启动,以满足它们之间的依赖关系。

例如,数据库服务可能需要在网络服务启动之后才能正常工作。

通过Shell脚本管理服务启动顺序可以确保它们能够按照正确的依赖关系启动,避免冲突和错误。

二、Shell脚本的编写编写Shell脚本来管理服务的启动顺序需要遵循一定的规范。

下面是一种常用的方法:1. 定义服务启动顺序首先,我们需要定义每个服务的启动顺序。

可以将服务按照其依赖关系进行排序,确保依赖关系较低的服务先启动。

这样可以避免启动时的冲突和错误。

例如,假设我们有三个服务需要启动:A、B和C。

服务A不依赖于其他服务,服务B依赖于服务A,而服务C依赖于服务B。

因此,启动的顺序应为A、B、C。

2. 编写Shell脚本创建一个新的Shell脚本文件,例如`startup.sh`,并使用文本编辑器打开它。

在脚本中,先使用`#!/bin/bash`指定脚本使用的Shell解释器。

然后,按照定义的服务启动顺序,逐个启动每个服务。

下面是一个示例脚本,用于按照上述定义的服务启动顺序启动服务:```#!/bin/bash# 启动服务Aservice A start# 等待一段时间,确保服务A已经启动完成sleep 5# 启动服务Bservice B start# 等待一段时间,确保服务B已经启动完成sleep 5# 启动服务Cservice C start```在脚本中,使用`service`命令来启动每个服务。

在每个服务启动之后,可以使用`sleep`命令来等待一段时间,以确保服务已经完全启动。

Linux三种进程类型

Linux三种进程类型

Linux三种进程类型
Linux操作系统包括三种不同类型的进程,每种进程都有⾃⼰的特点和属性。

1. 交互进程是由⼀个Shell启动的进程。

交互进程既可以在前台运⾏,也可以在后台运⾏。

2. 批处理进程和终端没有联系,是⼀个进程序列。

3. 监控进程(也称系统守护进程)是Linux系统启动时运⾏的进程,并常驻后台。

例如,httpd是著名的Apache服务器的监控进程。

init是Linux系统操作中不可缺少的程序之⼀。

所谓的init进程,它是⼀个由内核启动的⽤户级进程。

内核⾃⾏启动(已经被载⼊内存,开始运⾏,并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动⼀个⽤户级程序init的⽅式,完成引导进程。

所以,init始终是第⼀个进程(其进程编号始终为1)。

其它所有进程都是init进程的⼦孙。

init进程是不可杀的(即不能通过kill 命令杀掉进程)!。

Linux启动过程详解_MBR和GRUB概述

Linux启动过程详解_MBR和GRUB概述

MBR和GRUB概述Linux 的启动流程目前比较流行的方式主要是以下步骤:1、引导器(例如 GRUB)启动;2、内核启动;3、系统进程启动与配置。

本文以 GRUB 为研究对象,对 GRUB 启动与内核启动两个部分进行描述,关于系统进程的进一步启动与配置将用另一篇文章来说明。

常见的目录结构(以 CentOS 5.3 为例):/boot|-- System.map-2.6.18-128.el5|-- System.map-2.6.18-128.el5xen|-- config-2.6.18-128.el5|-- config-2.6.18-128.el5xen|-- initrd-2.6.18-128.el5.img|-- initrd-2.6.18-128.el5xen.img|-- lost+found|-- memtest86+-1.65|-- message|-- symvers-2.6.18-128.el5.gz|-- symvers-2.6.18-128.el5xen.gz|-- vmlinuz-2.6.18-128.el5|-- vmlinuz-2.6.18-128.el5xen|-- xen-syms-2.6.18-128.el5|-- xen.gz-2.6.18-128.el5`-- grub|-- device.map|-- e2fs_stage1_5|-- fat_stage1_5|-- ffs_stage1_5|-- grub.conf|-- iso9660_stage1_5|-- jfs_stage1_5|-- menu.lst -> ./grub.conf|-- minix_stage1_5|-- reiserfs_stage1_5|-- splash.xpm.gz|-- stage1|-- stage2|-- ufs2_stage1_5|-- vstafs_stage1_5`-- xfs_stage1_5图一: CentOS 5.3 的 /boot 目录目录分作两大部分,一个是 /boot 目录下除 grub 目录以外的所有文件,这些是 Linux 的内核以及内核启动相关的一些文件;另一个就是 grub 下的所有文件, GRUB 引导器启动所需要的所有文件都在 grub 目录下。

Linux系统服务管理脚本使用Shell脚本实现对Linux系统服务的启动停止和重启操作

Linux系统服务管理脚本使用Shell脚本实现对Linux系统服务的启动停止和重启操作

Linux系统服务管理脚本使用Shell脚本实现对Linux系统服务的启动停止和重启操作在Linux系统中,服务是指在后台运行并提供各种功能的应用程序。

对于系统管理员来说,管理服务是非常重要和常见的任务。

为了更高效地管理Linux系统服务,可以使用Shell脚本实现对服务的启动、停止和重启操作。

本文将介绍如何使用Shell脚本来管理Linux系统服务。

一、编写Shell脚本首先,我们需要创建一个Shell脚本文件,例如名为“service_manage.sh”。

使用任何一个文本编辑器,打开一个新的文件,并输入以下内容:```shell#!/bin/bashfunction start_service {sudo systemctl start $1}function stop_service {sudo systemctl stop $1}function restart_service {sudo systemctl restart $1}echo "欢迎使用Linux系统服务管理脚本" echo "请输入您想要执行的操作:"echo "1. 启动服务"echo "2. 停止服务"echo "3. 重启服务"read choicecase $choice in1)echo "请输入要启动的服务名:"read service_namestart_service $service_name;;2)echo "请输入要停止的服务名:"read service_namestop_service $service_name;;echo "请输入要重启的服务名:"read service_namerestart_service $service_name;;*)echo "无效的选择";;esac```上述脚本定义了三个函数:`start_service`、`stop_service`和`restart_service`,分别用于启动、停止和重启服务。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Linux 进程的启动方式
程序或者命令的执行实际上是通过进程实现的。

通常情况下,程序或者命令是保存在硬盘上的,当在命令行中输入一个可执行程序的文件名或者命令并按下Enter 键后,系统内核就将该程序或者命令的相关代码加载到内存中开始执行。

系统会为该程序或者命令创建一个或者多个相关的进程,通过进程完成特定的任务。

启动进程的方式有两种,分别为前台启动方式和后台启动方式。

1.以前台方式启动进程
在终端窗口的命令行上输入一个Linux命令并按Enter键,以前台方式启动了一个进程。

例如,在终端窗口上执行“find /-name myfile.txt”命令,就可以以前台的方式启动一个进程。

而在该进程还未执行完时,可按下Ctrl+z组合键将该进程暂时挂起。

然后,可以使用ps命令查看该进程的有关信息,如图41所示。

图41 前台方式启动进程
2.以后台方式启动进程
在前台运行的进程是正在进行交互操作的进程,它可以从标准输入设备接收输入,并将输出结果送到标准输出设备,在同一时刻只能有一个进程在前台运行。

而在后台运行的进程一般不需要进行交互操作,不接收终端的输入。

通常情况下,可以让一些运行时间较长而且不接受终端输入的程序以后台方式运行,让操作系统调度它。

要在命令行上以后台方式启动进程,需要在执行的命令后添加一个“&”。

例如,在终端窗口的命令行上输入命令“find / -name myfile2.txt &”并按下Enter键后将从后台启动一个进程。

启动后,系统会显示如下所示的信息:
[2] 3516
这里的数字2表示该进程是运行于后台的第2个进程,数字3516是该进程的PID(即进程标识码,用于惟一地标识一个进程)。

然后,出现了shell提示符,这表示已返回到前台。

这时,执行ps命令将能够看到现在在系统中有两个由find命令引起的进程,它们的标识号是不同的,因而是两个不同的进程,其中,PID为3385的进程就是刚才被挂起的进程。

如果执行jobs命令可以查看当前控制台中的后台进程,可以看到当前在后台有两个进程,其中一个处于运行(Running)状态,另一个,即被挂起的进程处于停止
(Stopped)状态。

等过一段时间后再使用ps命令进行查看,会发现PID为3516的进程已经结束了,如图42所示。

图42 后台方式启动进程。

相关文档
最新文档