[关闭]
@qidiandasheng 2017-03-10T03:25:53.000000Z 字数 2140 阅读 1985

关于终端里面的进程

终端


进程的5种状态:

  1. 运行(正在运行或在运行队列中等待)
  2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号)
  3. 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)
  4. 僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放)
  5. 停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行)

ps命令

简单命令

ps -lA |more

相关信息的意义:

uid 用户号
pid 进程号
ppid 父进程号
size 内存大小, Kbytes字节.
vsize 总虚拟内存大小, bytes字节(包含code+data+stack)
share 总共享页数
nice 进程优先级(缺省为0, 最大为-20)
priority(pri) 内核调度优先级
pmem 进程分享的物理内存数的百分比
trs 程序执行代码驻留大小
rss 进程使用的总物理内存数, Kbytes字节
time 进程执行起到现在总的CPU暂用时间
stat 进程状态
cmd(args) 执行命令的简单格式

STAT状态

D 无法中断的休眠状态(通常 IO 的进程);
R 正在运行可中在队列中可过行的;
S 处于休眠状态;
T 停止或被追踪;
W 进入内存交换 (从内核2.6开始无效);
X 死掉的进程 (基本很少見);
Z 僵尸进程;
< 优先级高的进程
N 优先级较低的进程
L 有些页被锁进内存;
s 进程的领导者(在它之下有子进程);
l 多进程的(使用 CLONE_THREAD, 类似 NPTL pthreads);
+ 位于后台的进程组;


后台任务和前台任务

任务放入后台&

当我们在前台运行某个作业时,终端被该作业占据;而在后台运行作业时,它不会占据终端。可以使用&命令把作业放到后台执行。

比如我使用wget下载资源:

前台任务:
wget https://s3.amazonaws.com/edgytech/umongo-osx-all_1-6-2.zip

后台任务:
wget https://s3.amazonaws.com/edgytech/umongo-osx-all_1-6-2.zip &

但是任务运行在后台还是会把输出显示在当前终端上面,虽然可是加入其它任务,但是大量的输出也会影响你。所以我们可以把这些输出重定向到out.file文件中:

wget https://s3.amazonaws.com/edgytech/umongo-osx-all_1-6-2.zip >out.file 2>&1 &

>out.file表示任务输出重定向到的文件,2>&1表示所有的标准输出和错误输出。

查看后台任务jobs

当有后台任务在运行时,可以使用jobs来查看后台任务。

前后台切换任务fg bg

注意

jobs列出的是当前shell环境中的后台任务,也就是说你打开一个新的终端界面输入jobs是看不到之前那个终端里的后台任务的。只能回到之前的那个终端才能查看到。

但是新开一个终端使用ps是能看到所有shell环境的进程的,可以使用kill pid杀掉之前那个终端中运行在后台的任务。


kill 终止进程

kill -STOP [pid]
发送SIGSTOP (17,19,23)停止一个进程,而并不消灭这个进程。
kill -CONT [pid]
发送SIGCONT (19,18,25)重新开始一个停止的进程。
kill -KILL [pid]
发送SIGKILL (9)强迫进程立即停止,并且不实施清理操作。
kill -9 -1
终止你拥有的全部进程。


添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注