从windows到*nix(三) 多任务

来源:互联网 发布:网络英语电台 编辑:程序博客网 时间:2024/06/11 09:59

我们知道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了