> 文章列表 > 【Linux】进程概念

【Linux】进程概念

【Linux】进程概念

进程概念

  • 一、查看进程?
  • 二、通过系统调用获取进程标示符
  • 三、通过系统调用创建子进程
  • 四、两种特殊的进程

一、查看进程?

xshell中开启多窗口可以一边关注程序运行情况,一边进行其他操作,开启的组合键shift+alt+t,然后会在原窗口下开启一个相同服务器的窗口,此时点击该标题栏
【Linux】进程概念

使用鼠标进行拖动,然后窗口界面会出现明显的淡蓝色背景,此时就可以拖到你想要的位置上,在开启多窗口后,需要在不同的窗口建进行切换,组合键为shift+tab。

1.通过/proc系统文件夹查看所有进程
【Linux】进程概念

2.ps axj | grep test
【Linux】进程概念
【Linux】进程概念
结束进程,用【Ctrl + c】或执行 kill -9 [选项名]

二、通过系统调用获取进程标示符

getpid() :获取进行id
getppid():获取父进程id
【Linux】进程概念
通过 getpid() 和 getppid() 函数得到的值是进程对应的id;
另外 test 进程的父进程是 bash,即 shell 外壳,这也侧面证实了 – shell 为了防止自身崩溃,并不会自己去执行指令,而是会派生子进程去执行。

三、通过系统调用创建子进程

1.通过man fork认识fork

man 帮助的内容非常之多,为了快速找到需要定位的内容,man 帮助的内容非常之多,为了快速找到需要定位的内容【Linux】进程概念
【Linux】进程概念
可以看到,创建成功的话子进程的id会返回给父进程,0返回给子进程;父进程返回给bash,即fork有两个返回值。创建失败,返回-1。
2.通过系统调用接口 fork 来创建子进程:
通常fork之后通过if分流:
【Linux】进程概念

【Linux】进程概念

四、两种特殊的进程

1.僵尸进程
一个进程的资源在被全部释放之前,需要由父进程或者操作系统来读取退出状态代码,如果父进程不读取子进程的退出状态代码,该进程的PCB就一直得不到释放,此时该进程就会变成僵尸进程。
创建一个僵尸进程的例子:
【Linux】进程概念

【Linux】进程概念
【Linux】进程概念
当 kill 掉子进程18332之后,由于父进程中没有对子进程的退出状态代码进行读取,所以子进程变成了 Z 状态,并且子进程后面还提示了 defunct (失效的,不再使用的),此时,如果父进程一直不对不对子进程进行读取,那么子进程就会变成僵尸进程。

僵尸进程的危害:如果父进程或者操作系统一直不对子进程的退出状态进行读取,那么子进程的退出状态就将一直被维持下去;维护退出状态本身就是要用数据维护,也属于进程基本信息,所以如果进程一直处于退出状态,进程对应的 PCB (task_struct) 就将一直存在,不会被释放;会造成内存资源的浪费;同样的也会造成内存泄露。

2.孤儿进程
父进程先退出,子进程就称之为“孤儿进程”。
【Linux】进程概念
【Linux】进程概念
孤儿进程会被1号init进程领养。