操作系统相关知识
1. 守护进程
1.1.什么是守护进程?
主要是将服务器方面的程序给隐藏到控制端下面。比如redis的,我们启动redis-server后,他会有一个图像化的界面,如果没有开启守护进程,你在set key value 后会有一个日志的打印。
如果你不小心按到ctrl +c了,不好意思,你的服务器dump掉了。
1.2.为什么要守护进程?
就是为了解决上述1说的守护进程就是为了隐藏到控制界面下面。
试想一下,如果你的电脑调打开了很多程序,这个时候都有一个界面放到这给你看。我们可以通过指令查看一下linux下有哪些开启了守护进程。
ps -axj
PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
0 1 1 1 ? -1 Ss 0 0:08 /sbin/init auto noprompt splash splash 3
0 2 0 0 ? -1 S 0 0:00 [kthreadd]
2 3 0 0 ? -1 I< 0 0:00 [rcu_gp]
2 4 0 0 ? -1 I< 0 0:00 [rcu_par_gp]
2 5 0 0 ? -1 I< 0 0:00 [slub_flushwq]
2 6 0 0 ? -1 I< 0 0:00 [netns]
2 7 0 0 ? -1 I 0 0:06 [kworker/0:0-events]
2 8 0 0 ? -1 I< 0 0:00 [kworker/0:0H-events_highpri]
2 10 0 0 ? -1 I< 0 0:00 [mm_percpu_wq]
2 11 0 0 ? -1 S 0 0:00 [rcu_tasks_rude_]
2 12 0 0 ? -1 S 0 0:00 [rcu_tasks_trace]
2 13 0 0 ? -1 S 0 0:00 [ksoftirqd/0]
2 14 0 0 ? -1 I 0 0:03 [rcu_sched]
2 15 0 0 ? -1 S 0 0:00 [migration/0]
2 16 0 0 ? -1 S 0 0:00 [idle_inject/0]
这只是一部分,至少要有一百多个开启守护进程的进程来启动服务。比如,脏页置换,网络io,如果你启动了比如,nginx,reids等等服务器,你开启xshell服务,如果有一百多个操作窗口,你肯定是要崩溃的。
目的:就是将应用服务隐藏到控制端下面,如果想调用,或者查看在通过指令切换查看就OK了,没必要全部摆到你的应用上让你看,尤其是涉及到操作系统本身的一些守护进程,很多很复杂,也没必要展示给程序员开,同时,给你看,你也不能中断该服务啊,你要是能中断了,你操作系统也太脆弱了。
1.3.守护进程干了什么?
所谓守护进程,其实就是让应用在控制界面后台提供服务。我们可以看到有很多进程的状态都是S睡着的。
这里扩展一下,进程的状态的讲解:
1.3.1进程的状态
从理论分析,进程状态有:就绪,运行,阻塞,
进程状态的附加符
1.4.如何创建守护进程?
进程:可以理解成上面redis-server的应用程序;
守护进程就是,要开启将上述redis-server给隐藏到后台,什么操作能够做到即能维持redis-server本身服务的不断,而又能够进行后台的转变呢?**开启子进程**使用fork函数。
具体的创建细节可以看其他的博客,这里展示不讲解。