日期:2014-05-16  浏览次数:20787 次

linux之进程

在linux每执行一个二进制文件都会产生一个进程并生成一个进程PID。进程除了自身的ID外,还有父进程ID(ppid),所有进程的祖先进程是同一个进程,它叫做init进程,PID为1。

当用户从一个终端登陆时,便获得一个此次执行的bash进程的PID。用户执行的每一条指令都是这个PID的子进程。

linux通过fork-and-exec的流程来产生子进程:首先会通过父进程以复制 (fork) 的方式产生一个一模一样的子进程, 然后被复制出来的子进程再以 exec 的方式来运行实际要进行的程序,最终就成为一个子进程的存在。

僵尸进程:当该程序应该已经运行完毕,或者是因故应该要终止了,但是该程序的父程序却无法完整的将该程序结束掉,而造成那个程序一直存在内存当中,形成僵尸进程。


进程后台运行与暂停

通过在命令结尾加上&,可以时命令在后台运行而不影响前台。
通过[ctrl]-z可以将前台正在运行的进程暂停。


jobs

查看当前后台工作状态: 
选项与参数:

-l  :除了列出 job number 与命令串之外,同时列出 PID 的号码;
-r  :仅列出正在背景 run 的工作;
-s  :仅列出正在背景当中暂停 (stop) 的工作。


[zsp@sky]~$ vim a
[1]+  已停止               vim a
[zsp@sky]~$ vim b
[2]+  已停止               vim b
[zsp@sky]~$ jobs
[1]-  已停止               vim a
[2]+  已停止               vim b
那个+代表最近一个被暂停到后台的工作,且当执行fg命令时在后台下默认会被取用的那个工作。-代表最近最后第二个被暂停到后台中的工作号码

fg

将后台的工作拿出来处理

%可以指定处理哪一个后台任务

[zsp@sky]~$ fg
vim b
[2]+  已停止               vim b
[zsp@sky]~$ jobs
[1]-  已停止               vim a
[2]+  已停止               vim b
[zsp@sky]~$ fg %1
vim a
[1]+  已停止               vim a
[zsp@sky]~$ jobs
[1]+  已停止               vim a
[2]-  已停止               vim b

bg

让一个被暂停的任务在后台继续运行


kill

停止或重启后台任务
-l  :这个是 L 的小写,列出目前 kill 能够使用的讯号 (signal) 有哪些?
-1 :重新读取一次参数的配置文件,启动被终止的进程;
-2 :代表与由键盘输入 [ctrl]-c 同样的动作;
-9 :立刻强制删除一个工作;
-15:以正常的程序方式终止一项工作。与 -9 是不一样的。


nohup

脱机执行后台进程
当后台任务正在执行时,若注销登录,那么任务也将停止。可以使用nohup来使任务在注销后继续执行。
nohup [命令与参数] & 

ps

将某个时间点的进程运行情况列下来
选项与参数:
-A  :所有的 process 均显示出来,与 -e 具有同样的效用;
-a  :不与 terminal 有关的所有 process ;
-u  :有效使用者 (effective user) 相关的 process ;
x   :通常与 a 这个参数一起使用,可列出较完整资讯。

输出格式规划:

l   :较长、较详细的将该 PID 的的资讯列出;
j   :工作的格式 (jobs format)
-f  :做一个更为完整的输出。

常用:

ps aux  列出系统所有的程序数据
ps -l 仅列出自己 bash 程序


[zsp@sky]~$ ps -l
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
0 S  1000  1955  1948  0  80   0 -  6086 wait   pts/0    00:00:00 bash
0 R  1000  2917  1955  0  80   0 -  2530 -      pts/0    00:00:00 ps
从左到右各个字段意思
F:代表这个程序标志,说明这个程序的权限,常见号码有:
        若为 4 表示此程序的权限为 root ;
        若为 1 则表示此子程序仅进行复制(fork)而没有实际运行(exec)。
S:代表这个程序的状态 (STAT),主要的状态有:
        R (Running):该程序正在运行中;
        S (Sleep):该程序目前正在睡眠状态(idle),但可以被唤醒(signal)。
        D :不可被唤醒的睡眠状态,通常这支程序可能在等待 I/O 的情况(ex>列印)
        T :停止状态(stop),可能是在工作控制(背景暂停)或除错 (traced) 状态;
        Z (Zombie):僵尸状态,程序已经终止但却无法被移除至内存外。