Linux-程序与进程学习

简介: Linux-程序与进程学习

一,程序与进程

程序 ( program ):
  通常为 binary program ,放置在储存媒体中(如硬盘、光盘、软盘、磁带等), 
  为实体文件的型态存在;二进制文件,比如静态 /bin/date, /usr/sbin/httpd,
  /usr/sbin/sshd,/usr/local/nginx/sbin/nginx;
进程 ( process ):
  程序被触发后,执行者的权限与属性、程序的程序码与所需数据等都会被载入内存中, 
  操作系统并给予这个内存内的单元一个识别码 ( PID ),可以说,进程就是一个正
  在运行中的程序。是程序运行的过程,动态,有生命周期及运行状态。
进程调用:
  一个进程通过fork()函数,创建一个和自己一样的进程。被创建出来的进程是子进程,
  而创建子进程的进程就是父进程子进程是父进程的一个副本,是它的复制,两者不共享
  地址空间(内存)。
程序调用的流程 fork and exec : 
  其实子程序与父程序之间的关系还挺复杂的,最大的复杂点在于程序互相之间的调用。
  在 Linux 的程序调用通常称为 fork-and-exec 的流程程序都会借由父程序以复制 ( fork )
  的方式产生一个一模一样的子程序, 然后被复制出来的子程序再以 exec的方式来执行
  实际要进行的程序,最终就成为一个子程序的存在。
  echo $$   查看当前进程ID
  echo $PPID  查看父进程ID
僵尸进程:
  一个进程使用fork创建子进程,如果父进程退出,子进程没有退出,没有父进程统一管理和
  结束,所占资源无法释放。
进程的属性:
  进程ID:PID 唯一的值,用来区分进程
  父进程的ID: PPID 
  启动进程的用户ID(UID)和所属组(GID)
  进程状态:运行R  休眠S 僵尸Z
  进程执行的优先级
  进程所连接的终端名
  进程资源占用:内存、cpu占用量

二,进程工具

1.进程静态查看工具 ps

用于报告当前系统的进程状态。可以搭配kill指令随时中断、删除不必要的程序

选项:
  a: 显示当前终端关联的所有进程
  u:基于用户的格式显示
  x: 显示所有进程,不以终端来区分,通常与a这个参数一起使用。
  -e:显示所有程序,与-A具有同样的效果 
  -l或l(小写L):采用详细的格式来显示程序状况。
  -f:显示UID,PPID,C与STIME栏位。  
  -j或j:采用工作控制的格式显示程序状况。(jobs format) 

2.远程拷贝工具

 

            本地的文件         远程的主机           目标路径
scp -rp /etc/yum.repos.d/* root@192.168.174.133:/etc/yum.repos.d/ 
scp -rp root@192.168.174.133:/etc/yum.repos.d/*  /etc/yum.repos.d/

3.压力测试工具:ab

1. yum安装 httpd-tools 包
2. ab -c 1000 -n 100000 http://192.168.174.131/index.html
3. 
4. -c 模拟的访问主机数
5. -n 建立多少个链接数

ps常用方法

ps aux 观察系统所有程序数据
[root@localhost ~]# ps aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.3 125124  3628 ?        Ss   04:07   0:00 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
root          2  0.0  0.0      0     0 ?        S    04:07   0:00 [kthreadd]
root          3  0.0  0.0      0     0 ?        S    04:07   0:00 [ksoftirqd/0]
root          7  0.0  0.0      0     0 ?        S    04:07   0:00 [migration/0]
USER :该 process 属于那个使用者帐号的?
PID :该 process 的程序识别码。
%CPU :该 process 使用掉的 CPU 资源百分比;
%MEM :该 process 所占用的实体内存百分比;
VSZ :该 process 使用掉的虚拟内存量 ( KBytes )
RSS :该 process 占用的固定的内存量 ( KBytes )
TTY :该 process 是在那个终端机上面运行,若与终端机无关则显示 ?,另外,
tty1-tty6 是本机上面的登陆者程序,若为pts/0 等等的,则表示为由网络连接进主机的程序。
STAT :该程序目前的状态,状态显示与 ps -l 的 S 旗标相同 ( R/S/T/Z)
R:runing 运行态
S:可中断睡眠态
D:不可中断睡眠态
T:停止态
Z:僵尸态
s:表示这个进程是个领导者进程
+:该进程为前台进程
l:该进程是多线程进程
N:低优先级进程
<: 高优先级进程
[]: 表示这个一个内核线程
START :该 process 被触发启动的时间;
TIME :该 process 实际使用 CPU 运行的时间。
COMMAND :该程序的实际指令为何?

注:最后一列用[]括起来的进程是内核态进程,无[]的是用户态进程

ps -l  仅观察和登录者相关的程序

[root@localhost ~]# ps -l
F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0   2730   2727  0  80   0 - 28846 wait   pts/1    00:00:00 bash
0 R     0   2798   2730  0  80   0 - 37233 -      pts/1    00:00:00 ps
F :代表这个程序旗标 ( process flags ),说明这个程序的总结权限,常见号码:
若为 4 表示此程序的权限为 root ;若为 1 则表示此子程序仅进行复制( fork )而没有实际执行(exec )。
S :代表这个程序的状态 ( STAT )
UID/PID/PPID:代表 此程序被该 UID 所拥有 / 程序的 PID 号码 / 此程序的父程序 PID 号码
C:代表CPU 使用率,单位为百分比;
PRI/NI:Priority/Nice 的缩写,代表此程序被 CPU 所执行的优先顺序,数值越小代表该程序越
快被 CPU 执行。
ADDR/SZ/WCHAN :都与内存有关, ADDR 是 kernel function ,指出该程序在内存的哪个部分,
如果是个 running 的程序,一般就会显示 “ - ” / SZ 代表此程序用掉多少内存 / WCHAN
表示目前程序是否运行中,同样的, 若为 - 表示正在运行中。
TTY:登陆者的终端机位置,若为远端登陆则使用动态终端接口(pts/n )
TIME:使用掉的 CPU 时间,注意,是此程序实际花费 CPU 运行的时间,而不是系统时间;
CMD:就是 command 的缩写,造成此程序的触发程序之指令为何。

pstree  -p   显示进程树形结构

pgrep  -l  -u lisi   通过条件查找进程(查lisi所有进程)

4. 进程动态查看工具 top

       可以持续的监测整个系统的程序工作状态。每次更新程序资源的时间为5秒,可以使用 -d 来进行修改。

top -d 2   每隔2秒刷新一次

top - 12:32:48 up  8:25,  2 users,  load average: 0.03, 0.03, 0.05
Tasks:  91 total,   1 running,  90 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :   999936 total,   548228 free,    86208 used,   365500 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.   743120 avail Mem
   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
     1 root      20   0  125124   3628   2424 S  0.0  0.4   0:00.87 systemd
     2 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kthreadd
     3 root      20   0       0      0      0 S  0.0  0.0   0:00.37 ksoftirqd/0
     7 root      rt   0       0      0      0 S  0.0  0.0   0:00.00 migration/0
     8 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcu_bh
     9 root      20   0       0      0      0 S  0.0  0.0   0:00.41 rcu_sched
选项:
M 按内存排比
P   按cpu排比
T   按时间排比
us — 用户空间占用CPU的百分比。
sy — 内核空间占用CPU的百分比。
ni — 改变过优先级的进程占用CPU的百分比
id — 空闲CPU百分比
wa — IO等待占用CPU的百分比
hi — 硬中断(Hardware IRQ)占用CPU的百分比
si — 软中断(Software Interrupts)占用CPU的百分比
st ---虚拟cpu等待实际cpu的时间百分比

  top 默认使用 CPU 使用率( %CPU ) 作为排序的重点,如果你想要使用内存使用率排序,则可以按 “M”, 若要恢复则按 “P” 即可。如果想要离开top 则按 “ q ” 。


       若将 top 的信息进行2次,然后输出到/top/top.txt

       top -b -n 2 > /tmp/top.txt


5. 进程的前后台调动

前台:你可以控制与下达指令的这个环境称为前景的工作 (foreground )

后台:可以自行运行的工作,无法使用 ctrl+c 终止他,可使用 bg/fg 调用该工作


ctrl + z   把前台进程调到后台停止执行

&     把前台进程调到后台继续执行

例: cp /dev/cdrom  /root/centos7.iso &

jobs     查看后台工作状态

[root@localhost ~]# jobs
选项:  
  -l:显示进程号;
  -p:仅任务对应的显示进程号;
  -n:显示任务状态的变化;
  -r:仅输出运行状态(running)的任务;
  -s:仅输出停止状态(stoped)的任务。

fg   将后台任务拿到前台处理

bg   将后台暂停任务继续执行

kill    进程号  仅杀死某个进程号的进程
killall  进程名  杀死进程名开启的所有进程和子进程
pkill -u lisi  杀死满足条件的进程
选项:
  -9  强制
  -15  正常结束,默认 
  -l  列出所有信号
   0 status  状态
   1 SIGHUP 重载
   2   SIGINT 终止,Ctrl+c
   3 SIGQUIT 退出
   9 SIGKILL 强制终止
   15  SIGTERM 正常结束,默认
   18  SIGCONT 继续
   19  SIGSTOP 停止
   20  SIGTSTP 暂停,ctrl+z

6. 改变进程优先级


       PRI :进程优先权,代表这个进程可被执行的优先级,其值越小,优先级就越高,越早被执行

      NI :进程Nice值,代表这个进程的优先值,-20到19,PRI(new)=PRI(old)+nice

       %nice :改变过优先级的进程的占用CPU的百分比

命令:

nice -n -5 vim & 指定执行命令的nice值

renice -5 进程号 修改已运行进程的nice值

7. screen 虚拟窗口管理器,建立稳定的远程管理会话

       远程执行长时间操作,比如:数据库的备份,数据量较大,ssh远程连接中断,备份也会中止

安装screen工具:

yum -y install screen

(1)要进行某项操作时,先使用命令创建一个Screen:

screen -S test1

(2)接着就可以在里面进行操作了,如果你的任务还没完成就要走开的话,使用命令保留Screen:

Ctrl+a+d                    #按Ctrl+a,然后再按d即可保留Screen
    [detached]                  #这时会显示出这个提示,说明已经保留好Screen了
   如果你工作完成的话,就直接输入:
exit                        #这样就表示成功退出了
    [screen is terminating]

(3)如果你上一次保留了Screen,可以使用命令查看:

screen -ls

(4)恢复Screen,使用命令:

screen -r test1

Screen命令中用到的快捷键

Ctrl+a c :创建窗口
Ctrl+a w :窗口列表
Ctrl+a n :下一个窗口
Ctrl+a p :上一个窗口
Ctrl+a 0-9 :在第0个窗口和第9个窗口之间切换
Ctrl+a K(大写) :关闭当前窗口,并且切换到下一个窗口(当退出最后一个窗口时,该终端自动终止,并且退回到原始shell状态)
exit :关闭当前窗口,并且切换到下一个窗口(当退出最后一个窗口时,该终端自动终止,并且退回到原始shell状态)
Ctrl+a d :退出当前终端,返回加载screen前的shell命令状态

注:

工作经验:恢复误删除文件(仅限于centos6)

ext3: 恢复命令 ext3grep

ext4: 恢复命令 extundelete

windows: final data、easyrecovery恢复工具

目录
相关文章
|
23小时前
|
NoSQL Linux 程序员
【linux进程信号(一)】信号的概念以及产生信号的方式
【linux进程信号(一)】信号的概念以及产生信号的方式
|
23小时前
|
Linux
【linux进程间通信(一)】匿名管道和命名管道
【linux进程间通信(一)】匿名管道和命名管道
|
1天前
|
Java Shell Linux
【linux进程控制(三)】进程程序替换--如何自己实现一个bash解释器?
【linux进程控制(三)】进程程序替换--如何自己实现一个bash解释器?
|
1天前
|
算法 Linux Shell
【linux进程(二)】如何创建子进程?--fork函数深度剖析
【linux进程(二)】如何创建子进程?--fork函数深度剖析
|
1天前
|
存储 Linux Shell
【linux进程(一)】深入理解进程概念--什么是进程?PCB的底层是什么?
【linux进程(一)】深入理解进程概念--什么是进程?PCB的底层是什么?
|
1天前
|
消息中间件 Unix Linux
Linux的学习之路:17、进程间通信(1)
Linux的学习之路:17、进程间通信(1)
16 1
|
1月前
|
消息中间件 Linux
Linux进程间通信(IPC)教程 Linux共享内存介绍:介绍POSIX共享内存的基本概念、用途和编程实践
Linux进程间通信(IPC)教程 Linux共享内存介绍:介绍POSIX共享内存的基本概念、用途和编程实践
22 2
|
1月前
|
消息中间件 存储 安全
Linux 进程和线程介绍:介绍Linux系统中进程和线程的基本概念、执行方式和相互关系
Linux 进程和线程介绍:介绍Linux系统中进程和线程的基本概念、执行方式和相互关系
34 1
Linux 进程和线程介绍:介绍Linux系统中进程和线程的基本概念、执行方式和相互关系
|
3月前
|
存储 缓存 Linux
『 Linux 』进程地址空间概念
『 Linux 』进程地址空间概念
|
3月前
|
存储 固态存储 Linux
『 Linux 』进程概念
『 Linux 』进程概念