一、什么是init进程

在介绍init进程前我们先了解下什么是进程

1.进程的概念

所谓进程就是系统中正在运行的程序,进程是操作系统的概念,每当我们执行一个程序时,对于操作系统来讲就是创建了一个进程,在这个过程中操作系统对进程资源的分配和释放,可以认为进程就是一个程序的一次执行过程。

2.Linux下的三个特殊进程

Linux下有三个特殊的进程idle进程(PID=0),init进程(PID=1),和kthreadd(PID=2)

idle进程由系统自动创建,运行在内核态

idle进程其pid=0,其前身是系统创建的第一个进程,也是唯一一个没有通过fork或者kernel_thread产生的进程。完成加载系统后,演变为进程调度、交换。

kthreadd进程由idle通过kernel_thread创建,并始终运行在内核空间,负责所有内核进程的调度和管理。

它的任务就是管理和调度其他内核线程kernel_thread, 会循环执行一个kthread的函数,该函数的作用就是运行kthread_create_list全局链表中维护的kthread, 当我们调用kernel_thread创建的内核线程会被加入到此链表中,因此所有的内核线程都是直接或者间接的以kthreadd为父进程 。

init进程由idle通过kernel_thread创建,在内核空间完成初始化后,加载init程序

在这里我们就主要讲解下init进程,init进程由0进程创建,完成系统的初始化,是系统中所有其他用户进程的祖先进程

Linux中的所有进程都是由init进程创建并运行的。首先Linux内核启动,然后在用户空间中启动init进程,再启动其他系统进程。在系统启动完成后,init将变成为守护进程监视系统其他进程。

所以说init进程是Linux系统操作中不可缺少的程序之一,如果内核找不到init进程就会试着运行/bin/sh,如果运行失败,系统的启动也会失败。

二、运行级别

init服务的配置文件是/etc/inittab

在centos7之前inittab的配置文件是这样的

# inittab is only used by upstart for the default runlevel.

#

# ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.

#

# System initialization is started by /etc/init/rcS.conf

#

# Individual runlevels are started by /etc/init/rc.conf

#

# Ctrl-Alt-Delete is handled by /etc/init/control-alt-delete.conf

#

# Terminal gettys are handled by /etc/init/tty.conf and /etc/init/serial.conf,

# with configuration in /etc/sysconfig/init.

#

# For information on how to write upstart event handlers, or how

# upstart works, see init(5), init(8), and initctl(8).

#

# Default runlevel. The runlevels used are:

# 0 - halt (Do NOT set initdefault to this)

# 1 - Single user mode

# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)

# 3 - Full multiuser mode

# 4 - unused

# 5 - X11

# 6 - reboot (Do NOT set initdefault to this)

#

id:5:initdefault:

里面介绍了init的6个运行级别

0是关机

1是单用户

2是多用户,不联网

3是多用户

4是不使用的

5是xwindows,也就是有界面的

6是重启

init命令很简单。直接输入init + 你想要的模式 回车就行。

我们可以使用runlevel命令来查询当前系统的运行级别。

比如 输入 : init 0 就是关机

init 3 就是切换到多用户

init 5 就是切换到界面

init 6 就是重启

但是千万不要把initdefault设置为0或者6

但是在centos7之后有了一个新的服务systemd取代了init,

systemd 是 Linux 下一个与 SysV 和 LSB 初始化脚本兼容的系统和服务管理器。在这里我也不过多介绍了,大家有兴趣可以自行研究下。

三、init运行级别的定义

init的运行级别配置是在/etc/init,而这些级别的定义是在/etc/rc.d目录内的如下:

[root@centos6 rc.d]# ll

total 60

drwxr-xr-x. 2 root root 4096 Jan 9 02:30 init.d

-rwxr-xr-x. 1 root root 2617 Mar 23 2017 rc

drwxr-xr-x. 2 root root 4096 Jan 9 02:30 rc0.d

drwxr-xr-x. 2 root root 4096 Jan 9 02:30 rc1.d

drwxr-xr-x. 2 root root 4096 Jan 9 18:39 rc2.d

drwxr-xr-x. 2 root root 4096 Jan 9 18:39 rc3.d

drwxr-xr-x. 2 root root 4096 Jan 9 18:39 rc4.d

drwxr-xr-x. 2 root root 4096 Jan 9 18:39 rc5.d

drwxr-xr-x. 2 root root 4096 Jan 9 02:30 rc6.d

-rwxr-xr-x. 1 root root 220 Mar 23 2017 rc.local

-rwxr-xr-x. 1 root root 20199 Mar 23 2017 rc.sysinit

这里的rc{0..6}.目录对应相应的级别里面放的都是要启动和关闭的进程我们进去看一下

[root@centos6 rc3.d]# ls

K01smartd K69rpcsvcgssd K95firstboot S13irqbalance S26udev-post

K02oddjobd K73winbind K99rngd S13rpcbind S28autofs

K05wdaemon K74ntpd S01sysstat S15mdmonitor S50bluetooth

K10psacct K75ntpdate S02lvm2-monitor S22messagebus S55sshd

K10saslauthd K75quota_nld S05rdma S23NetworkManager S80postfix

K15htcacheclean K76ypbind S08ip6tables S24nfslock S82abrtd

K15httpd K84wpa_supplicant S08iptables S24rpcgssd S83abrt-ccpp

K30spice-vdagentd K87restorecond S10network S25blk-availability S90crond

K50dnsmasq K88sssd S11auditd S25cups S95atd

K50kdump K89netconsole S11portreserve S25netfs S99certmonger

K60nfs K89rdisc S12rsyslog S26acpid S99local

K61nfs-rdma K92pppoe-server S13cpuspeed S26haldaemon

这里以K开头的都是要关闭的进程,而以S开头的则是要启动的进程

[root@centos6 rc6.d]# ls

K01certmonger K25sshd K74haldaemon K84wpa_supplicant K90network

K01smartd K30postfix K74ntpd K85mdmonitor K92ip6tables

K02oddjobd K30spice-vdagentd K75blk-availability K85messagebus K92iptables

K05atd K50dnsmasq K75netfs K87irqbalance K92pppoe-server

K05wdaemon K50kdump K75ntpdate K87restorecond K95firstboot

K10cups K60crond K75quota_nld K87rpcbind K95rdma

K10psacct K60nfs K75udev-post K88auditd K99cpuspeed

K10saslauthd K61nfs-rdma K76ypbind K88rsyslog K99lvm2-monitor

K15htcacheclean K69rpcsvcgssd K83bluetooth K88sssd K99rngd

K15httpd K72autofs K83nfslock K89netconsole K99sysstat

K16abrt-ccpp K73winbind K83rpcgssd K89portreserve S00killall

K16abrtd K74acpid K84NetworkManager K89rdisc S01reboot

像rc6.d目录中基本都是要关闭的进程,只有S00killall和S01reboot这两个要启动的进程他们分别是结束所有进程和重启系统。这里文件中的数字代表了他们的优先级,数字越小优先启动。所以我们自己做的服务放在这个目录中时要谨慎以免因为他所需的关联程序没有启动而导致进程无法启动。

PS:如果真的不小心把init默认运行级别设置为0或6的解决办法

我们知道init0和6级别分别对应的是关机和重启,如果把这两个设为默认运行级别我们是无法进入系统的,所以我们就要借助救援系统了,在开机GRUB界面按e如下:

选择kernel这行接着按e

在命令行最后输入1(进入单用户模式),回车退后到上个界面

接着按b进入单用户模式,我们这就进入到单用户模式了

我们只需要进入/etc/inittab配置文件中把最后的0或6改为3,重启系统就可以啦

linux进程管理init,浅谈init进程相关推荐

  1. linux内存管理_浅谈Linux内存管理

    1. 扫盲篇 1.1 操作系统存储层次 常见的计算机存储层次如下: 寄存器:CPU提供的,读写ns级别,容量字节级别. CPU缓存:CPU和CPU间的缓存,读写10ns级别,容量较大一些,百到千节. ...

  2. linux cp mv区别,浅谈Linux下mv和cp命令的区别

    1.功能上的区别 mv:用户可以使用该命令为文件或目录重命名或将文件由一个目录移入另一个目录中. cp: 该命令的功能是将给出的文件或目录拷贝到另一文件或目录中. 2.从inode角度来区分 mv:会 ...

  3. L63.linux命令每日一练 -- 第九章 Linux进程管理命令 -- runlevel、init和service

    9.13 runlevel:输出当前运行级别 9.13.1 命令详解 ​ [命令星级] ★★★★★ ​ [功能说明] ​ runlevel命令用于输出当前Linux系统的运行级别. ​ [语法格式] ...

  4. 【Linux系统编程】浅谈进程地址空间与虚拟存储空间

    早期的内存分配机制 在早期的计算机中,要运行一个程序,会把这些程序全都装入内存,程序都是直接运行在内存上的,也就是说程序中访问的内存地址都是实际的物理内存地址.当计算机同时运行多个程序时,必须保证这些 ...

  5. linux c控制进程并发量,浅谈Linux环境下并发编程中C语言fork()函数的使用

    由fork创建的新进程被称为子进程(child process).fork函数被调用一次,但返回两次.子进程的返回值是0,而父进程的返回值则是新进程的进程ID.将子进程ID返回给父进程的理由是:因为一 ...

  6. linux进程管理命令实验,实验2Linux进程管理.doc

    实验2Linux进程管理 实验2 Linux进程管理 实验目的 1.加深对进程概念的理解,明确进程和程序的区别 2.进一步认识并发执行的实质 3.分析进程争用资源的现象,学习解决进程互斥的方法 实验性 ...

  7. (王道408考研操作系统)第二章进程管理-第一节4:进程通信(配合Linux)

    文章目录 一:什么是进程通信 二:如何实现进程间通信及其分类 三:通信方式1-共享存储(共享内存) (1)课本基础内容 (2)补充-Linux中的进程通信 四:通信方式2-管道 (1)管道是什么 (2 ...

  8. (王道408考研操作系统)第二章进程管理-第一节3:进程控制(配合Linux讲解)

    文章目录 一:如何实现进程控制 二:进程控制原语 (1)进程创建 A:概述 B:补充-Linux中的创建进程操作 ①:fork() ②:fork()相关问题 (2)进程终止 A:概述 B:补充-僵尸进 ...

  9. hrs软件在linux下如何启动,linux中进程管理的三大工具及进程查看命令

    1.进程概念 通俗的讲进程就是一个运行起来的程序,只占用系统的内存空间,并且有唯一的进程标识符(PID),但和程序又有区别,程序是指令加数据,是一个进程指令的集合,可以启用一个或者多个进程,是静态的, ...

最新文章

  1. 只在必要时保存服务器控件视图状态
  2. svn更新提交等操作报svn: E155004错误,解决办法
  3. 【控制】李亚普诺夫稳定性分析
  4. ITK:在保留边缘的同时使图像平滑
  5. c语言5的阶乘流程图_2020年,5种将死的编程语言!
  6. 一步一步掌握设计模式一(最简单的开始--单例模式^_^)
  7. 我喜欢的一首歌--《幸福的瞬间》
  8. flutter 移动通知_Flutter开发之动画
  9. 使用QuickPart时应用自定义属性和Web Part Connection功能的演示视频
  10. 问题五十:怎么用ray tracing画blobs
  11. 16. Magento模板及布局文件中引用Static Block的方法
  12. Linux卸载Anaconda
  13. pocket英语语法入门
  14. linux查看udp丢包数量,Linux下UDP丢包问题分析思路
  15. android 读写sd权限,android 读写sd卡的权限设置
  16. scala reduce和Fold
  17. 认知升级三部曲(深度好文)
  18. 程序员进阶架构师、技术总监、CTO,需要掌握哪些核心技能
  19. 2019年双十一购物数据分析报告
  20. tplinkwr703无线打印服务器,TP-Link TL-WR703N无线路由器设置

热门文章

  1. C#LeetCode刷题之#67-二进制求和(Add Binary)
  2. PHPStorm开启Debug
  3. 复合辛普森求积公式原理_辛普森法则:公式及其原理
  4. 决策树编程python_Python如何制定决策:编程中的控制流简介
  5. 函数式编程 模式_函数式编程模式:食谱
  6. heroku服务器_如何在Heroku上使用Express服务器部署React应用
  7. 如何在TensorFlow中通过深度学习构建年龄和性别的多任务预测器
  8. 小程序开发 宽度100%_这是您作为开发人员可以实现100%年度目标的方式
  9. 周末项目:使用scikit-learn进行手语和静态手势识别
  10. sdk和api有什么区别