手机版
你好,游客 登录 注册 搜索
背景:
阅读新闻

Linux 进程管理 详述

[日期:2016-11-28] 来源:Linux社区  作者:swjtufq [字体: ]

我长期规划的目标是往底层走,所以我最近一段时间开始分享Linux的一些文章,前期是Linux基本操作,然后是Linux应用开发,最后我还打算研究Linux底层内核,驱动,因为Linux这块我也是初学者,所以在分享文章的时候,可能有些人会觉得比较浅,我在刚刚开始写文章的时候就说了,目的一方面是分享给大家,另外一方面算是自己的一个笔记,整理出来,加深理解,所以最近的文章或者接下来的文章,可能有些内容比较基础或不够全面,也请见谅。。。
好了,花了一个周末研究了下Linux 进程管理,今天就来简单谈谈:
我们先用ps -ef查看下进程
Linux进程管理

Linux进程管理

PID就是进程ID,PPID是父进程ID
/sbin/init是1号进程,我们可以看到ps -ef 的进程ID是2090,父进程ID是1960
1960号进程是-bash,也就是我们的shell,它的父进程是1956
1956号进程是 sshd:root@pts/0,也就是我们的远程终端,它的父进程是1516,/usr/sbin/sshd是一个sshd的服务,1516号进程的父进程是1 init

我们可以在程序中来查看当前进程的pid和ppid
Linux进程管理
我们用scanf等待输入,防止进程死掉
Linux进程管理

那么我们的进程在内核中是如何运行的呢
Linux进程管理

其实内核的运行也是需要操作内存,但是每个进程又是独立的,这就需要虚拟内存来实现,每个进程有自己的虚拟内存,里面存储了代码区,堆,共享库,栈,环境变量,命令行参数,内核地址空间等等,然后通过时间片的方式真正操作内存
Linux进程管理

就好像一个正在读取的磁盘一样,一直在转,轮询到自己的时候,就真正操作内存来执行,其他时间就等待。

所以Linux进程执行是多任务,分时执行的,看上去好像是同时执行,其实是轮着执行

我们可以通过fork函数创建一个进程
Linux进程管理

执行结果:
Linux进程管理

我们可以看到父进行和子进程都执行了
fork的过程就是父进程把自己的虚拟内存中存的东西,拷贝一份直接给子进程,然后接下来的执行过程分为两个分支,父进程和子进程同时执行,执行的先后顺序不确定。
我们对上面的代码稍微修改下:
Linux进程管理

执行结果:
Linux进程管理

我们可以看到count的结果都是1,代表父进程和子进程是分开执行的,并且互不影响

我们来看下面一个程序:
Linux进程管理

执行结果:
Linux进程管理

总共有8个进程了,这个分裂的过程是怎么回事呢
第一次fork
Linux进程管理

第二次fork
Linux进程管理

第三次fork
Linux进程管理

下面我们来谈一下vfork
vfork是与父进程共享地址空间,并且父进程会等子进程执行完毕,才执行,子进行有自己的pid
看例子:
Linux进程管理

执行结果:
Linux进程管理

由于子进程是和父进程共享内存地址空间,所以子进程执行完,父执行再执行的时候,count=2了

进程的等待就是wait函数,进程的销毁就是exit函数,这个没什么好说的

下面看下执行文件exec族
Linux进程管理
就是用来执行文件的,下面我们举两个例子

Linux进程管理

后面的参数要从命理开始,最后以NULL结尾
运行结果:
Linux进程管理

Linux进程管理

运行结果跟上面一样的,其他函数,读者自己写下,运行下就行了

下面来看看守护进程Daemon
守护进程是脱离终端,在后台运行的进程,不会因为终端关闭而关闭
创建守护进行一般是如下几个步骤
1 创建子进行,退出父进程
2 创建新的会话,来脱离终端
3 关闭所有的文件描述符
4 改变工作目录为根目录
5 umask重设权限掩码
6 具体事件

我们来看一个例子
Linux进程管理

Linux进程管理

运行
Linux进程管理

ps -ef
Linux进程管理
我们看到./mydaemon的进程的父进程是1了
再来看看是否一直在往文件中写内容
Linux进程管理
Linux进程管理

如果想杀死这个进程,用kill 进程号即可
Linux进程管理

再看
Linux进程管理
我们的守护进程被杀死了

好了,Linux进程管理就总结到这里,如有问题,欢迎指正,谢谢。

本文永久更新链接地址http://www.linuxidc.com/Linux/2016-11/137617.htm

linux
相关资讯       Linux进程管理 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留��中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款