我的linux学习11 程序与资源管理

时间:2022-12-13 15:34:22
作业管理:

cp file1 file2 &  重点在&表示执行这个命令并且是在后台执行

如果在命令执行的过程中有输出,则就不会显示提示符,也就无法完好的控制前台作业,所以我们需要有数据流重导向:例如  tar -cvzf /tmp/etc.tar.gz  /etc > /tmp/log.tar2> &1 &

 

将当前作业放到后台暂停: 【Crtl+Z】

例如我在执行vim编辑,突然不知道一个文件在哪里,我没必要关掉VIM,可以先暂停然后在使用。

 

jobs [-lrs] :观察后台作业的状态。-l 除了列出作业号之外同时列出PID,-r仅列出正在后台运行(run)的作业,-s仅列出正在后台暂停(stop)的作业。

 

fg %jobnumber:将后台作业拿到前台处理,%可有可无。

bg %jobnunber:将作业放到后台运行。

 

kill:-l列出所有能够使用的信号。常用有-1重新读取,-2相当与crtl+c,-9立刻强制删除一个作业,-15以正常的方式终止一项作业。注:假如我在操作VIM,-9强制删除则会生成一个swf文件,而-15表示以正常方式结束,不会生成,这是这2个的区别。

kill -n [ %jobnumber | PID]


强制杀死某程序   kill -9 `ps aux | grep 'syslog' | head -n 1 | awk '{print$2}'`

killall:一般来说,kill一般用来杀死某进程,通过PID或者启动该服务的命令名称。但是一般删掉某个服务最简单的办法就是使用killall   如:killall -9 httpd

 

进程的观察:

ps -l :列出属于自己这次登录的PID与相关信息。

FS  UID   PID PPID  C PRI  NI ADDR SZWCHAN TTY         TIME CMD
0 S  1000  1925 1921 80   0 -  2047wait  pts/0   00:00:00 bash
0 S  1000  2216 1925 80   0 -  2069wait  pts/0   00:00:00 bash
0 R  1000  3022 2216 80   0 -  1496-     pts/0   00:00:00 ps
相关解释:F  进程标志,4为超级用户。S  进程状态。PID 和PPID 分别为进程ID和父进程ID。 C  表示CPU使用的资源百分比。PRI  优先级 。 NInice值。ADDR  核心功能,指出该进程在内存的哪一部分,如果运行的进程,一般是 - 。SZ 用掉内存的大小。WCHAN  当前进程是否在运行,- 表示在运行。 TIME用掉CPU的时间。

ps aux:列出当前在内存中的进程。

ps -lA:以ps -l的形式列出所有的进程。

ps -ajxf :以类似进程树的形式显示。


xiaozhe@ubuntu:~$ps aux | head -n 3
USER      PID %CPU %MEM   VSZ   RSSTTY     STAT START   TIMECOMMAND
root         0.0 0.0   2892  1684?       Ss  09:28   0:00/sbin/init
root         0.0 0.0        0?         09:28   0:00[kthreadd]
相关解释:USER  属于哪个用户帐号。PID 该进程号码。%CPU 进程占用CPU资源百分比。%MEM 进程占用物理内存的百分比。VSZ 该进程占用虚拟内存量(KB)。RSS该进程占用的固定内存量(KB)。STAT R正在运行,S 睡眠,T 检测或停止,Z 僵尸程序。START 被触发启动的时间。TIME实际使用CPU运行时间。

top:进程观察工具
-d :后接秒数,就是整个进程画面更新的秒数,默认5秒。
-b:以批处理文件执行top,还有更多的参数,通常会搭配数据流重导向,将批处理输出为文件。
-n:与-b搭配,意义是需要进行几次top的输出结果。
-p:指定某些个PID进行观察检测。
在top执行过程中可以使用的按键命令。
     ?:显示在top中可以输入的按键命令
     P:按CPU使用资源排序
     M:按内存使用资源排序
     N:按PID来排序
     T:按该进程使用的CPU时间积累(TIME+)排序
     k:给某个PID一个信号 
     r:给某个PID重新确定一个值(NI  nice值,与PR一样,都是越小越早执行)

例:将top执行2次并输入到文件                  top -b -n 2 > /tmp/top.txt
        仅观察某个特定的PID(如4134)              top -d 2 -p4134

pstree:进程树,-A 各进程树之间以ASCII字符来链接,-p 同时列出每个进程的PID ,-u同时列出每个进程的所属帐号名称。

系统资源观察:

free:显示系统内存容量

uname : -a 显示所有系统基本信息

uptime:显示系统开机时间及负载率

netstat:-a将当前系统上所有的联机,监听,套接字数据都列出来,-t列出tcp网络包数据,-u列出udp网络包数据,-n不以进程名以端口号来显示,-l列出当前正在网络监听的服务,-p列出网络服务的进程PID。

dmesg:输出所有核心开机时的信息。

 

进程的执行顺序:

Pri(new) = Pri(old)+Ni(nice)值越小优先级越高,一般Pri是系统给的,而NI是给用户的可调的(top命令中的r即可)。

一般用户的NICE值范围所0~19,而root的NICE值范围为-20~19

 

nice [-n] command:主要是用root用户工作,给一个 -19~20的值。

例如:用root给一个nice值为-5 的vim并观察其进程。

root@ubuntu:~# nice -n -5 vi & 然后用ps -l 查看。


renice [number] PID:将某个PID的nice值改为number

如 renice 10 18852 将PID为18852的nice值改为了10

 

特殊文件与进程

SUID,SGID的权限。可以用find / -perm +6000找到系统中的所有此类文件

 

/proc/*:因为进程都是在内存中,而内存中的数据又写值proc中,各个进程的PID以目录的形似存在/proc中。

 

查询已打开文件或已执行进程打开的文件:

fuser [-ki] [-signal]file/dir:-k表示找出使用该文件或目录PID并试图将SIGNKILL信号传给PID。-i与-k配合,在删除PID之前要求用户确认。-signal如-1~-15等,若不添加默认为Signkill(-9).

 

xiaozhe@ubuntu:~$ fuser.     找出当前目录的使用(结果很多,例如1491c)

xiaozhe@ubuntu:~$ ps aux | grep1491   通过PID找出此进程

fuser执行结果中:c代表在当前目录下,e代表可执行,f是一个打开的文件,r表示根目录

例如:找出/var下属于FIFO类型的文件,并找出访问该文件的进程。

步骤1:find /var -type p

步骤2:fuser /var/lib/urandom/random-seed加入使用该文件的进程PID为(1666和1667)

步骤3:ps aux | egrep '(1666 |1667)'   得到信息

同上,如果要删除PID,则:

fuser -ki  /var/lib/urandom/random-seed

 

fuser是通过文件查找使用它的进程,而lsof是通过进程查找使用的文件

 lsof [-Uu][+d]:-a需要多项数据同时成立才显示结果。-U仅列出类Unix系统的套接字文件类型。-u后面接用户名,列出该用户相关进程所打开的文件。+d后接目录,找出某个目录下已打开的文件。


pidof [-sx]programe_name:-s仅列出一个PID而不列出所有的PID。-x同时列出该程序名(programe_name)可能的PPID进程的PID。

例如:列出init和syslogd这两个进程的PID

pidof init syslogd

pidof -x bash 找出以bash为PPID的几个主要的PID