Linux下进程知识(1)

#Linux 下进程的总结(1)

##什么是进程?

进程是程序执行一次的过程。它占用了CPU,占用了内存的资源。
操作系统为了将各个进程统一管理起来。将每一个进程定义成了一个小块,这个小块被称之为PCB(Program control blocks) 程序控制块。通常情况下我们可以把这个块看做是一个小的结构体。在Linux下,这个结构体是task_struct。这个结构体会在进程进行时被装载到内存当中去使得这个进程能被操作系统监视起来。

##查看进程

查看进程信息可以再 Proc的文件夹目录下查看。

在这里插入图片描述

除此之外,我们还可以使用 top命令 和 ps命令来查看进程信息。
使用 ps命令时候 -ef 和 aux可以查看详细信息

在这里插入图片描述
每个进程都有自己独立的id 。其中 父进程 的id为 ppid() 。子进程的 id为 pid()。

##初次使用fork()函数

在这里插入图片描述

通过手册初步了解 fork()函数。fork()函数可以在执行的代码中创建一个 子进程。这个子进程的代码与父进程完全相同。

fork()函数创建的子进程,将会自己开辟空间运行。代码是父进程的一份临时拷贝。
fork()函数返回两个值。如果这个值大于零表示是父进程。如果等于零则表示是子进程。

不妨写个程序来看看他们会返回什么样的值。

在这里插入图片描述
在这里插入图片描述

这里看到 父进程的pid是 3506,而子进程的pid是3507。

##进程的状态

进程也是有状态的。通常来说进程有三种状态,即 就绪态,阻塞态,执行态。进程在这三种最基本的状态中间切换。
而在Linux下,进程的状态通常有 7种基本状态。
R:Running 运行态,表示进程要么在运行当中,要么处于临界区的之前的等待队列中。
S:Sleeping 睡眠态,表示进程在等待着事件的完成。(这个过程是可以被打断的,所以也叫做可中断睡眠态)。
D:Disk Sleeping 磁盘休眠态,表示进程正在等待着磁盘i/o过程结束,这个过程是不可以被打断的。(不可中断睡眠态(uninterrupted sleeping))。
T:Stopped 停止状态。可以通过SIGSTOP信号停止(T)进程。也可以使用SIGCONT来继续使其进入(T进程)。
X:Dead 死亡状态。不可以在任务管理器当中看到该状态。它是一个返回值。
t:trace追踪状态
Z : 僵尸状态。消耗内存空间。造成内存泄漏。
在这里插入图片描述

##特殊的进程状态

###僵尸进程(zombie)

当一个父进程创建了一个子进程后,子进程意外退出,此时父进程没有接受到子进程的退出的返回代码时,就会产生僵死状态。

这个僵尸进程是子进程遗留的产物,它将保存子进程退出时的返回代码,等待着父进程接收。如果父进程一直运行,且不接收,那么这个遗留产物就会一直等待着,占用内存空间,造成内存泄漏。

如果一个父进程创建了较多的子进程后,不进行回收就会造成大量的内存占用。

###孤儿进程 (orphan)

孤儿进程指的是,当一个父进程创建了一个子进程后。父进程先于子进程退出,子进程就会找不到返回代码的对象,此时的子进程就是孤儿进程。

孤儿进程会被“孤儿院”领养。这个“孤儿院”是 Init 1。在任务资源管理器中的第一个进程。它会在后台默默挂起这个子进程。

猜你喜欢

转载自blog.csdn.net/H_Strong/article/details/83016555