Linux 中的 详解
实际上,命令的用法并不难,例如 mkdir、touch 和 find 也分别可以简单概括为“建立新目录”、“更新文件”和“在目录树中查找文件”而已。 但如果要理解
这一串命令的目的,以及为什么要这样写,就没有这么简单了。 关键之处就在于命令之间的连接符号。掌握了这些符号的用法,不仅可以让你更好理解整体的工作原理,还可以让你知道如何将不同的命令有效地结合起来,提高工作效率。 在这一篇文章和接下来的文章中,我会介绍如何使用 & 号和管道符号(|)在不同场景下的使用方法。 幕后工作 我来举一个简单的例子,看看如何使用 & 号将下面这个命令放到后台运行:
这个命令的目的是将 original/dir/ 的内容递归地复制到 backup/dir/ 中。虽然看起来很简单,但是如果原目录里面的文件太大,在执行过程中终端就会一直被卡住。 所以,可以在命令的末尾加上一个 & 号,将这个任务放到后台去执行:
任务被放到后台执行之后,就可以立即继续在同一个终端上工作了,甚至关闭终端也不影响这个任务的正常执行。需要注意的是,如果要求这个任务输出内容到标准输出中(例如 echo 或 ls),即使使用了 &,也会等待这些输出任务在前台运行完毕。 当使用 & 将一个进程放置到后台运行的时候,Bash 会提示这个进程的进程 ID。在 Linux 系统中运行的每一个进程都有一个唯一的进程 ID,你可以使用进程 ID 来暂停、恢复或者终止对应的进程,因此进程 ID 是非常重要的。 这个时候,只要你还停留在启动进程的终端当中,就可以使用以下几个命令来对管理后台进程:
$ fg %1 # 将上面序号为 1 的 cp 任务放到前台运行cp -i -R original/dir/* backup/dir/ 如果这个进程任务是暂停状态,fg 命令会将它启动起来。
如上所述,以上几个命令只能在同一个终端里才能使用。如果启动进程任务的终端被关闭了,或者切换到了另一个终端,以上几个命令就无法使用了。 如果要在另一个终端管理后台进程,就需要其它工具了。例如可以使用 kill[5] 命令从另一个终端终止某个进程:
这里的 PID 就是使用 & 将进程放到后台时 Bash 显示的那个进程 ID。如果你当时没有把进程 ID 记录下来,也可以使用 ps 命令(代表 process)来获取所有正在运行的进程的进程 ID,就像这样:
执行以后会显示出包含 cp 字符串的所有进程,例如上面例子中的 cp 进程。同时还会显示出对应的进程 ID:
在这个例子中,进程 ID 是 14444,因此可以使用以下命令来暂停这个后台进程:
注意,这里的 STOP 等同于前面提到的 ctrl+z 组合键的效果,也就是仅仅把进程暂停掉。 如果想要把暂停了的进程启动起来,可以对进程发出 CONT 信号:
这个给出一个可以向进程发出的常用信号[6]列表。如果想要终止一个进程,可以发送 TERM 信号:
如果进程不响应 TERM 信号并拒绝退出,还可以发送 KILL 信号强制终止进程:
强制终止进程可能会有一定的风险,但如果遇到进程无节制消耗资源的情况,这样的信号还是能够派上用场的。 (编辑:ASP站长网) |