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

企鹅日记(十六):linux程序管理

在linux当中,触发任何一个事件时,系统都会将它定义成为一个进程,并且给予这个进程一个PID,同时依据触发这个进程的用户与相关属性关系,给予这个PID一组有效的权限设置,从此以后,这个PID就够在系统上进行的操作就与这个PID的权限有关了。进程衍生出来的其他进程在一般状态下,也会沿用这个进程的相关权限,比如登录bash这个进程,在bash中执行其他程序,产生的进程的权限就是这个bash的权限。

父子进程,可通过PPID找到该进程的父进程

====工作管理 job control====

主要指的是在一个bash环境下同时执行多个任务,多个工作。

# tar -zpcf /tmp/etc.tar.gz /etc &

# tar -zpcvf /tmp/etc.tar.gz /etc > /tmp/log.txt 2>&1 &

将目前的工作丢到后台中“暂停”:CTRL + Z

# jobs [-lrs]

-l:除了列出job number与命令串外,同时列出PID

-r:仅列出正在后台run的工作

-s:仅列出正在后台stop的工作

+ 代表最近被放到后台的工作号码

- 代表最后第二个被放到后台中的工作号码,其他神马都不显示

# fg %jobnumber? <==将后台工作拿到前台来处理

# bg %jobnumber? <==将后台工作变成run状态,让它运行起来

# kill -signal %jobnumber

# kill -l

-l:列出目前kill能够使用的signal有哪些

-2:代表由键盘输入 CTRL + C同样的操作

-9:立刻强制删除一个工作

-15:以正常的程序方式终止一项工作

====脱机管理问题====

job管理中程序与终端机有关(因为是bash的子进程),如果远程连接后断开,后台的jobs都消失了。于是:

# nohup [命令与参数]?? <== 在终端机前台中工作

# nohup [命令与参数]? <== 在终端机后台中工作

nohup并不知道bash内部命令,所以你的命令全部都应该是外部命令(因为bash命令和终端机会绑定啊。。)

====进程的查看====

# ps aux? <===查看系统所有进程数据

# ps -lA? <==也是查看系统所有进程数据

# ps axjf? <==联通部分进程树状态

-A:所有进程均显示,与-e有相同的作用

-a:不与terminal相关的所有进程

-u:有效用户相关的进程

x:通常与a参数一起使用,可列出较完整的信息

输出格式规划:

l:较长,较详细的将该PID信息列出

j:工作的格式

-f:做一个更完整的输出,包含父子树结构

其实只需要记住两个就行:

ps -l? : 查看自己bash程序相关的进程

[yidao@localhost ~]$ ps -l
F S?? UID?? PID? PPID? C PRI? NI ADDR SZ WCHAN? TTY????????? TIME CMD
0 S? 1000? 2220? 2218? 0? 80?? 0 - 34449 wait?? pts/0??? 00:00:00 bash
0 R? 1000? 3006? 2220? 0? 80?? 0 - 33916 -????? pts/0??? 00:00:00 ps

# ps -lA显示的格式与上面的ps -l一样,数据相跟下面的ps aux一样,显示系统上所有进程数据

ps aux:查看所有系统运行的进程

[yidao@localhost ~]$ ps aux
USER?????? PID %CPU %MEM??? VSZ?? RSS TTY????? STAT START?? TIME COMMAND
root???????? 1? 0.0? 0.1? 45852? 4484 ???????? Ss?? 20:47?? 0:01 /usr/lib/systemd/systemd
root???????? 2? 0.0? 0.0????? 0???? 0 ???????? S??? 20:47?? 0:00 [kthreadd]
root???????? 3? 0.0? 0.0????? 0???? 0 ???????? S??? 20:47?? 0:00 [ksoftirqd/0]

解释下ps aux的各个字段含义:

USER:该进程属于哪个用户帐号,即由哪个用户触发

PID:不解释

%CPU:不解释

%MEM:不解释

VSZ:该进程使用掉的虚拟内存量(KB)

RSS:该进程占用的固定的内存量(KB)

TTY:该进程是在哪个终端机上运行,若与终端机无关则显示? 另外,tty1~tty6是本机上面登陆者程序,若为pts/0等,则表示为由网络连接进主机的进程。

STAT:该进程目前状态,主要有:

??? * R(Running):该进程正在运行中

??? * S(Sleeping):正在睡眠,可以被唤醒

??? * D:不可被唤醒状态

??? * T:停止状态

??? * Z:Zombie,僵尸状态,进程已终止但无法将其从内存中删除

START:进程被触发的时间

TIME:进程实际使用了CPU运行的时间

COMMAND:该进程的实际命令

# ps axjf? <==显示进程树,你懂的

动态查看进程变化:

# top [-d 数字]

# top [-bnp]

-d:后面接数字,就是整个界面刷新的秒数,默认5秒

-b:以批次方式执行top,还可数据流重导向。。。

-n:与-b搭配,意思是几次top输出结果

-p:指定PID进行专门查看特定进程状态

top执行过程中常用按键:

??? ?:显示top中可以输入的按键

??? P:以CPU使用排序

??? M:以内存使用排序

??? N:以PID排序

??? T:该进程使用CPU累计时间(TIME+)排序

??? k:给予某个PID一个信号signal

??? r:给予某个PID重新定制一个Nice值

??? q:离开quit

# top -d 2

top - 21:51:51 up? 1:04,? 2 users,? load average: 0.29, 0.30, 0.34
Tasks: 168 total,?? 2 running, 166 sleeping,?? 0 stopped,?? 0 zombie
Cpu(s):? 3.6%us,? 1.5%sy,? 0.0%ni, 94.1%id,? 0.4%wa,? 0.3%hi,? 0.1%si,? 0.0%st
Mem:?? 3950684k total,? 1224448k used,? 2726236k free,??? 97148k buffers
Swap:? 2097148k total,??????? 0k used,? 2097148k free,?? 577636k cached

? PID USER????? PR? NI? VIRT? RES? SHR S %CPU %MEM??? TIME+? COMMAND???????????????????????????????????????????????
?2358 yidao???? 20?? 0? 655m? 58m? 20m S 15.4? 1.5?? 9:48.58 plugin-containe???????????????????????????????????????
?1660 yidao????? 9 -11? 539m 7692 5476 S? 5.0? 0.2?? 2:26.63 pulseaudio????????????????????????????????????????????
? 763 root??