我们知道windows是一个多任务操作系统,同时运行的任务可以任意切换,还有任务管理器,*nix也是。你一定不会满足一次只执行一个程序,等待程序结束后再执行下一个。下面我们来看看怎么做:
后台启动
找一个耗时比较长的例子来说明一下问题:
这是程序在前台运行时的情形,如果你等不及,那么你可以在执行时让它在后台运行:
在命令的后面加一个”&“符号,这时候shell给你一个作业号和进程ID,表示刚才的任务已经进入后台。然后你随意进行一些操作(如果你不做任何操作,你不会得到通知),我这里的例子是直接回车几次,程序运行结束后,你会得到通知。
前后台切换
还是sleep的例子
^Z表示按下Ctrl+Z 把前台程序挂起,并分配了一个作业号1,此时程序暂停运行
jobs 查看一下当前的作业
bg 1 把作业号为1的作业设定为后台运行,此时程序继续运行
fg 1 把作业号为1的作业切换到前台
这几个操作,一般来说,是用于全屏编辑器那样的程序。对于普通的*nix程序,在后台运行的话,我们都会把它的输出重定向到文件,或者它自己记日志文件,因此没有必要再切换到前台,除非我要——杀死它
杀死进程
有两种方式:
1. 如果它在前台,那么按Ctrl+C,向它发出一个中断信号,通常就死了,在后台的话,用前面说的fg命令切换到前台再Ctrl+C
2. 如果它不响应Ctrl+C,或者不在作业范围内,也就是说没有作业号,而只有一个进程ID,那么用kill命令。
kill命令的前提是你要知道进程ID,获取进程ID可以用ps
如果你遇到kill也杀不死的情况下,你试试kill -9,这是发送了一个不可被程序拦截的信号。
还有一个极端情况,程序既不响应Ctrl+C,也无法挂起(Ctrl+Z),这样只好再开一个终端了。
终端连接
一般来说,虽然*nix的shell具备有限的多任务特性,但这对于用过windows的人来说是远远不够的。
所以我们都会建立多个终端到主机的连接。
第一种方式:
如果是直接与主机相连的终端,例如你在本机安装了一个*nix,或者你跑到机房里去管理服务器,那么你按Alt+F1,Alt+F2...可以切换不同的终端。
第二种方式:
用图形界面的软件,例如SecureCRT或putty,通过ssh或者telnet连接到*nix,你可以在这些软件中建立多个到主机的连接,用选项卡在不同连接中切换。
当拥有多个终端时,例如调试C/S结构软件时,可以在一个终端中运行服务器,另一个终端运行客户端。又例如在一个终端中写代码和编译,另一个终端中运行以查看结果。
补充
top命令 提供一个相当于windows下的任务管理器界面,但是这种事情还是GUI程序更拿手。一般用top看一下当前系统的资源占用情况,哪些程序占用CPU,按<Space>手动刷新,按q退出。
uptime命令 显示当前系统运行时间和负载,就是刚才top命令显示出的第一行
ps -ef 它比ps命令输出更多更详细的进程列表。单纯的ps只列出用户自己的进程,而这个命令列出所有用户和系统的进程。
Ctrl+q,Ctrl+s 如果你不小心按到了Ctrl+q,终端上会暂停任何显示,但是依然接受你的输入,你的感觉就是系统没响应了,这时候你按一下Ctrl+s,终端会继续显示。因此遇到系统没响应的时候,先别乱按,注意一下是不是按到Ctrl+q了