首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux下1号进程的前世(kernel_init)今生(init进程)----Linux进程的管理与调度(六)

init进程 随后,1号进程调用do_execve运行可执行程序init,并演变成用户态1号进程,即init进程init进程linux内核启动的第一个用户级进程。...两者容易混淆,区别如下: kernel_init函数在内核态运行,是内核代码 init进程是内核启动并运行的第一个用户进程,运行在用户态下。...,这几个位置以前常用来放置init,但是init的最适当的位置(在Linux系统上)是/sbin/init。...因此init程序是一个可以又用户编写的进程, 如果希望看init程序源码的朋友,可以参见 init包 说明 学习链接 sysvinit 早期一些版本使用的初始化进程工具, 目前在逐渐淡出linux历史舞台...systemd Systemd 是 Linux 系统中最新的初始化系统(init),它主要的设计目标是克服 sysvinit 固有的缺点,提高系统的启动速度 浅析 Linux 初始化 init 系统(

3.7K11

linux内核学习(三)之init进程学习(上)

然后再反过来具体分析linux内核启动过程,启动过程会设计到一些汇编语言,以及这个时候去具体分析c语言代码的话,就真正考验c语言的功底的时候到了;同时c语言的基本功,大家可以去看我以前学习c语言的一些常用...一、init进程完成了从内核态向用户态的转变: 1、一个进程2种状态: 这里所说的一个进程两种状态,说的是进程状态的转换;首先在介绍这种状态的转换之前,我们来了解一下什么是init进程,它其实是linux...内核源代码中的所有函数都是内核态下面的,执行任何一个都不能脱离内核态。应用程序必须不属于内核源代码,这样才能保证自己是用户态。也就是说我们这里执行的这个init程序和内核不在一起,他是另外提供的。...具体kernel_execve函数如下(这里赞不分析,暂时让大家理性的感受一下第一次看linux内核代码的感受,这里主要面向第一次接触linux代码的小伙伴哦。)...,比如我们在windows任务管理器里面就可以看到如下图所示: 在我们linux系统里面的话,在init进程转换为用户状态下后,后面有一些我们比较熟悉的进程操作:login进程、命令行进程、shell

1.6K20
您找到你想要的搜索结果了吗?
是的
没有找到

init进程启动过程

init进程是由多个源文件共同组成的,源码目录在system/core/init中。 源码分析 main(入口函数) Linux内核加载完成后,在系统文件中寻找init.rc文件,并启动init进程。...代码路径:system/core/init/init.cpp int SecondStageMain(int argc, char** argv) { //初始化属性服务配置 PropertyInit...僵尸进程 在Unix/Linux中,父进程fork创建子进程,在子进程终止后,如果父进程不知道子进程已经终止了,这时子进程虽然退出了,但是系统进程表还保留它的信息,这个子进程就被称为僵尸进程。...,这个进程的执行程序路径为/system/bin/app_process64,后面的代码是传给app_process64的参数。...,则调用fork函数创建子进程 pid = fork(); } //当前代码逻辑在子进程运行 if (pid == 0) { umask(077);

35520

Linux下0号进程的前世(init_task进程)今生(idle进程)----Linux进程的管理与调度(五)【转】

是系统中所有其它用户进程的祖先进程 Linux中的所有进程都是有init进程创建并运行的。首先Linux内核启动,然后在用户空间中启动init进程,再启动其他系统进程。.../linux/init_task.h文件中 init_task是Linux内核中的第一个线程,它贯穿于整个Linux系统的初始化过程中,该进程也是Linux系统中唯一一个没有用kernel_thread...创建init进程(PID =1)和kthread进程(PID=2) Linux在无进程概念的情况下将一直从初始化部分的代码执行到start_kernel,然后再到其最后一个函数调用rest_init...从rest_init开始,Linux开始产生进程,因为init_task是静态制造出来的,pid=0,它试图将从最早的汇编代码一直到start_kernel的执行都纳入到init_task进程上下文中。...这个函数其实是由0号进程执行的, 他就是在这个函数中, 创建了init进程和kthreadd进程 这部分代码如下: static noinline void __init_refok rest_init

4.8K30

Android启动系列之一:init进程和Zygote进程

Linux内核启动 当内核启动时,设置缓存、加载驱动等。在内核完成系统设置后,首先在系统文件中寻找init.rc文件,并启动init进程。...可以看到当我们按下启动电源时,系统启动后会加载引导程序,引导程序有启动Linux内核,当Linux内核加载完成后,第一件事就是启动init进程。...init进程Linux内核加载完成后,会首先在系统文件中寻找init.rc文件,并启动init进程,这样就执行了init进程的入口函数,部分代码如下: int main(int argc, char...进程启动做了很多工作,总的来说只要是以下三件事: 创建和挂载启动所需的文件目录 初始化和启动属性服务 解析init.rc配置文件并启动Zygote进程 这里我们重点关注一下Zygote进程的启动代码,如下...Zygote进程启动后,Linux系统下的pctrl系统会调用app_process,将其名称换成“zygote” 启动脚本 在init.rc文件中采用import来引入Zygote启动脚本,如下: import

35310

linux_init_and_systemd

”相对过时”做法了,由 service+chkconfig 变成 systemctl,背后是Linux 用户态进程管理体系的一次更改 service+chkconfig 是 system V 的做法 systemctl...什么是 是systemd systemd是Linux电脑操作系统之下的一套中央化系统及设置管理程序(init), 包括有守护进程、程序库跟应用软件, 由Lennart Poettering带头开发。...参考: https://zh.wikipedia.org/wiki/Systemd 趋势 systemd已纳入众多Linux发行版的软件源中,以下简表: 默认init程序为systemd的发行版 Fedora...等 Arch Linux在2012年10月13日将systemd-sysvcompat纳入base软件组,自此Arch Linux默认安装完即以systemd为init程序[13],同时也提供了与Arch...Debian GNU/Linux,在2014年的技术委员会的init系统投票中决定在Debian 8“Jessie”中以Linux为核心的版本转换到systemd[16]。

1.9K10

Android系统启动——2init进程

本次系列的内容如下: Android启动流程——1 序言、bootloader引导与Linux启动 Android系统启动——2 init进程 Android系统启动——3 init.rc解析...这个"根进程"就是init进程init进程是Android系统启动的第一个进程。它通过解析init.rc脚本来构建出系统的初始形态。...二、Init.cpp initLinux系统中用户空间的第一个进程(pid=1),Linux Kernel启动后,会调用/system/core/init/Init.cpp的main()方法 那我们就来看下...这是kernel和init进程会启动,但是大部分服务都不会启动 10.2、start_property_service()函数解析 代码在property_service.cpp 570行 void...第五件事:回收僵尸进程。我们知道,在Linux内核中,如果父进程不等待子进程结束就退出,那么当子进程结束的时候,就会变成一个僵尸进程,从而占用系统的资源。

2.8K20

Android系统启动流程(一)解析init进程

2.引入init进程 说到init进程,首先要提到Android系统启动流程的前几步: 1.启动电源以及系统启动 当电源按下时引导芯片代码开始从预定义的地方(固化在ROM)开始执行。...3.linux内核启动 内核启动时,设置缓存、被保护存储器、计划列表,加载驱动。当内核完成系统设置,它首先在系统文件中寻找”init”文件,然后启动root进程或者系统的第一个进程。...在本文的开始,我们提到在init.cpp代码中和属性服务相关的代码有: system/core/init/init.cpp ? 这两句代码用来初始化属性服务配置并启动属性服务。...在linux新的内核中,epoll用来替换select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。...注释1处的代码用来检查客户端进程权限,在注释2处则调用property_set函数对属性进行修改,代码如下所示。 ?

1.8K60

Linux进程——Linux进程进程优先级

如果对前面Linux进程不太熟悉可以先阅读: Linux进程 本篇主要内容: 僵尸进程和孤儿进程 Linux进程优先级 1. 僵尸进程 僵尸进程就是处于僵尸状态下的进程!...当进程退出并且父进程(使用wait()系统调用,后面讲) 没有读取到子进程退出的返回代码时就会产生僵死(尸)进程 僵死进程会以终止状态保持在进程表中,并且会一直在等待父进程读取退出状态代码。...因此我们可以知道:当进程退出但是还没被读取退出信息时处于僵尸状态 PCB释放: 当一个进程在退出的时候,退出信息会由OS写入到当前退出进程的PCB中,可以允许进程代码和数据空间被释放,但是不能允许进程的...NI :NICE值,表示优先级的修改数据 NICE其取值范围是-20至19,一共40个级别 Linux进程的优先级数值范围:60~99 Linux中默认进程的优先级都是:80 Linux是支持动态优先级调整的...总结 本篇文章前部分紧贴上篇Linux进程,分析完了Linux下常见的进程状态,然后初步了解了Linux进程优先级,而进程优先级与前面内容相差较大,希望大家能够多花点时间理解!

8910

一行代码如何隐藏 Linux 进程

作者 | dog250 原文 | https://blog.csdn.net/dog250/article/details/108032383 总有朋友问隐藏Linux进程的方法,我说你想隐藏到什么程度...本文介绍一种将Linux进程小隐于用户的非常规方法,仅仅一行代码: 修改掉进程的pid即可。 注意是小隐,所以,不值得反制,逗一下高级会议工程师搞个恶作剧玩玩得了。...如果你觉得 guru 模式的 stap 怪怪的,那么你完全可以编写自己独立的 Linux kernel module,采用修改完即退的方法: target->pid = xxxx; return -1;...是不是比各种hook法简单多了,所谓的动数据而不要动代码!...是不是比各种 hook 法简单多了,所谓的动数据而不要动代码! 简单的说一下原理: task被创建的时候,根据其pid注册procfs目录结构。

2.4K40

LinuxLinux进程控制>进程创建&&进程终止&&进程等待&&进程程序替换

1.进程创建 1.1 fork函数 在linux中fork函数时非常重要的函数,它从已存在进程中创建一个新进程。...fork代码后,内核做: 分配新的内存块和内核数据结构给子进程 将父进程部分数据结构内容拷贝至子进程 添加子进程到系统进程列表当中 fork返回,开始调度器调度 当一个进程调用fork之后,就有两个二进制代码相同的进程...代码运行完毕,结果不正确 代码异常终止 2.2 进程常见退出方法 2.2.1 正常终止 可以通过 echo $?.../a.out #等20秒退出 child exit code:10 [root@localhost linux]# ....当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动例程开始执行。

13410

Linux进程控制——Linux进程等待

前言:接着前面进程终止,话不多说我们进入Linux进程等待的学习,如果你还不了解进程终止建议先了解: Linux进程终止 本篇主要内容: 什么是进程等待 为什么要进行进程等待 如何进程等待...进程等待的概念: 我们通常说的进程等待其实是通过wait/waitpid的方式,让父进程(一般)对子进程进行资源回收的等待过程,父进程必须等待这个子进程结束后,处理它的代码和数据! 2....进程等待必要性: 若子进程退出,而父进程对它不管不顾,就可能造成‘僵尸进程’的问题,进而造成内存泄漏。...父进程创建子进程的目的是为了让子进程协助自己完成任务的,而父进程需要知道子进程将任务完成得如何。这就需要通过进程等待的方式,获取子进程的退出信息。 3....进程等待的方法 3.1 wait方法 我们可以通过系统调用来等待进程:wait函数 wait等待任意一个子进程的退出,如果等待成功他将返回子进程的pid,失败则返回-1 我们就用一段代码来看看wait:

8910

Linux进程控制——Linux进程终止

前言:前面了解完前面的Linux进程基础概念后,我们算是解决了Linux进程中的一大麻烦,现在我们准备更深入的了解Linux进程——Linux进程控制!...我们主要介绍的Linux进程控制内容包括:进程终止,进程等待与替换,进程程序替换! 本篇主要内容: 重识进程创建 进程退出场景 错误码和退出码 1....sleep(100); return 0; } 而代码中的exit函数可以让进程终止 这段代码涵盖了fork创建进程进程终止,让我们来执行以下 fork创建进程进程的终止...进程终止 进程退出场景: 代码运行完毕,结果正确 代码运行完毕,结果不正确 代码异常终止 前面二者都是正常退出,而最后则是异常退出 2.1 main的退出码 我们之前写代码中,main函数只能return...2.3 进程异常终止 当我们的代码出异常了,也就是进程异常终止了,退出码还有意义吗?

9510

linux通过进程名杀死进程_linux关闭进程命令

笔记:根据一个进程的名字或启动此进程的命令(连续的一部分即可)杀死进程 一、使用单条命令 ps -ef | grep 进程名/启动进程的命令 | grep -v grep | awk ‘{print $2...}’ | xargs kill -9 执行结果: [1]-  已杀死               sleep 200 [2]+  已杀死               sleep 200 二、编写脚本 linux.../bin/bash # 脚本名:kill_process.sh # 脚本功能:强制杀死进程 方式kill -9     # 1通过ps查询进程的id     # 2使用kill -9 强制终止进程...函数功能:根据进程名杀死程序     参数:进程名     返回值:无 !...————————————————————— # 根据进程名查询包含进程名的进程 并排除grep查询进程和此脚本进程 ps -ef | grep “$pName” | grep -v grep | grep

16K20

Linux进程

Linux进程是系统中正在运行的程序的实例。每个进程都有一个唯一的进程标识符(PID),并且拥有自己的地址空间、内存、数据栈以及其他用于跟踪执行状态的属性。...Linux进程可以根据其特性和用途被分为多种类型。以下是一些主要的Linux进程类型: 1....• 守护进程通常用于执行系统级任务,如日志记录、系统监控、定时任务等。 • 守护进程没有控制终端,它们通常由init进程或systemd启动。 4....• 孤儿进程会被init进程(PID为1)或其他特殊进程接管,init进程会负责这些孤儿进程的回收工作。 • 孤儿进程不会对系统性能产生负面影响。 5....进程间通信(IPC) 进程间通信(IPC)是指两个或多个进程之间传输数据或信号的机制。Linux支持多种IPC机制,包括: 1.

5710

Linux】systemv init和systemd的区别

引言 在Linux操作系统中,系统初始化和服务管理是操作系统的核心组成部分。随着时间的推移,Linux系统采用了不同的初始化系统,其中最常见的是systemv init和systemd。...SystemV Init简介 SystemV Init(简称SysV Init)是Linux系统中的一种较早期的初始化系统,用于控制系统的启动和服务管理。...引导加载程序: 引导加载程序(如GRUB)加载Linux内核。 内核初始化: Linux内核初始化系统的关键组件,然后启动第一个用户空间进程。...SysV Init启动: 第一个用户空间进程负责启动SysV Init,根据默认或指定的运行级别执行相应的启动脚本。...cgroups 支持: 提供对控制组的更好支持,用于管理和隔离进程。 3. 区别对比 3.1 启动速度 SystemV Init: 顺序启动,相对较慢,特别是在处理复杂的服务依赖关系时。

47910
领券