在介绍init进程前咱们先了解下什么是进程
1.进程的概念windows
所谓进程就是系统中正在运行的程序,进程是操做系统的概念,每当咱们执行一个程序时,对于操做系统来说就是建立了一个进程,在这个过程当中操做系统对进程资源的分配和释放,能够认为进程就是一个程序的一次执行过程。
2.Linux下的三个特殊进程centos
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,若是运行失败,系统的启动也会失败。ssh
init服务的配置文件是/etc/inittab
在centos7以前inittab的配置文件是这样的ide
# 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是单用户post
2是多用户,不联网this
3是多用户centos7
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的运行级别配置是在/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,重启系统就能够啦