LGCB

进程

粗略的来讲,每当我启动一个程序,系统就会对应启动一个进程。本课介绍进程的基本操作,包括查看进程号,后台执行,以及当程序运行出现故障的时候,如何杀死进程。

获取进程号

Linux 系统上有一个命令叫 ps

$ man ps

可以看到它的作用是:报告系统当前的进程状态。

打开终端,运行 vim 程序,这样这个程序会一直占据当前这个 shell 。现在我们来开启一个新的终端标签,使用快捷键 shift-ctrl-t 。关于如何自定制终端快捷键可以查看 edit -> keyboard shortcuts

查看系统当前所有进程,要加 aux 参数,注意没有 - 。在新打开的 shell 里输入

$ ps aux

内容不少,可以用 less 来做分页器,从开头查看

$ ps aux|less

这样我们看到,第一个字段 USER 代表是哪个用户执行的这个进程,第二个 PID ( Porcess ID )就是我们要的进程号了。其他那些内容我不太关心,表 11-1,11-2 上有清晰的说明。http://billie66.github.io/TLCL/book/zh/chap11.html

/vim 可以查找到我们想要的 vim 这个进程。

当你知道那一部分代表进程号之后,后面一般用管道线加 grep 来进行查找

$ ps aux|grep vim

拿到进程号(双击进程号选中,ctrl-shift-c 复制,ctrl-shift-v 粘贴),我们就可以对这个进程进行 操作了,比如可以结束这个进程

$ kill 2345

后台执行

启动 firefox ,直接后台启动

$ firefox &

如果不小心直接在前台启动了,那么当前这个 shell 就会被一直占据

$ firefox

要把这个程序变成后台执行也是可以的,先用 Ctrl-Z 将它挂起,然后

$ bg

想让程序重新回到前台,就在当前 shell,执行

$ fg

这样就可以用 Ctrl-C 来关闭了

我们一般还是用快速启动栏来启动这些 GUI 程序,这样就不涉及上面的问题了。

kill 进程

关闭进程是实际中很常见的操作。如果一个进程在 shell 的前台执行,我们就可以用 Ctrl-C 将它关闭,效果类似于

$ kill PID
$ killall program_name

Ctrl-C 和 kill PID 不加参数发出的信号是不一样的,可以参见表 11-4,但是它们的作用都是去结束一个还在正常运行着的程序进程。 如果程序执行已经出了异常,那咱们再去对它执行 ctrl-c 和 kill PID 它都会没有任何响应。这时要用 kill -9 PID 强行杀死 。

但是有时候更倒霉,整个桌面系统都被这个程序给拖死了,也就是我这里的终端根本就敲不了命令了。怎么办?

Linux 默认会启动七个 console (控制台)只有在第七个上面才运行图形界面。所以我可以 Control-Alt-F1 进入第一个 console,Control-Alt-F2 进入第二个,以此类推,到 Control-Alt-F7 我就回到图形界面了。

一些程序也可以规定自己的结束方式,比如我现在用的这个 shell,就可以敲 exit 来结束,这个操作就相当于敲 ctrl-d 。

好的,这集就是这些。进程这部分只是如果写程序的时候需要了解的更多,但是日常命令行使用,常用的技巧就是咱们上面介绍的这些了。