什么是进程

根据维基百科的定义,进程(Process)是计算机中已运行程序的实体。用户下达运行程序的命令后,就会产生进程。进程需要一些资源才能完成工作,如CPU使用时间、存储器、文件以及I/O设备,且为依序逐一进行,也就是每个CPU核心任何时间内仅能运行一项进程。

我们简单总结下,进程就是代码运行的实体。这里补充一点,进程不一定都是正在运行的,也可能在等待调度或者停止,进程状态将在后续详细介绍。

举个例子

进程的概念应该很好理解,因为我们都在写代码,这些代码跑起来了就是一个进程,为了完整性我们介绍最简单的的Hello World进程。

Hello World程序是每门编程语言的入门示例,注意这个程序还不是进程哦,它的作用是在终端输出“Hello World”然后直接退出。

当我们运行Hello World程序时,系统就创建一个Hello World进程。这也是最简单的进程了,没有系统调用、进程间通信等,输出字符串后就退出了。

Bash实现

用Bash实现Hello World程序只需要一行代码,运行后新的进程也可以输出“Hello World”,然后就没有然后了。

[email protected]:/go/src# echo Hello World
Hello World

稍微提一下echo是Linux自带的程序,可以接受一个或多个参数,反正就是如实地把它们输出到终端而已。

这样最简单的Linux进程就诞生了,当然我们也可以用Go重写Hello World程序。

Go实现

Go实现的程序源码可参见hello_world.go。

package main
import (
  "fmt"
)
func main() {
  fmt.Println("Hello World")
}

运行后得到以下的输出。

[email protected]:/go/src# go run hello_world.go
Hello World

Hello World进程运行时究竟发生了什么,接下来我们将从各个方面介绍进程的概念。

下一节:进程的概念大家都很熟悉,但你是否能准确说出僵尸进程的含义呢?还有COW(Copy On Write)、Flock(File Lock)、Epoll和Namespace的概念又是否了解过呢?