Linux进程相关操作及其应用

进程状态:

R(running):该程序正在运行中

S(sleep):该程序正在睡眠状态(idle),但是可以被唤醒(signal)

D:不可被唤醒状态,通常进程可能在等待I/O的情况

T:停止状态(stop),可能是在工作控制(背景暂停)或出错(traced)状态

Z:(zombie):僵尸状态,程序已经中之但是无法移出内存外

查看进程:

1.图形方式查看:

ps -A :

进程查看命令:

ps -A所有进程
ps -a在当前环境下运行的进程,不包含环境信息
ps -u显示进程用户信息
ps a在当前环境中运行的进程
ps x列出系统中所有运行包含tty输出设备
ps  f显示进程的父子关系
 ps e显示进程的详细信息
ps -A :

ps -a :

上图所示:先在当前shell中打开vim运行ps和ps -a,可以看到ps是显示环境信息ps -a不显示环境信息

ps -u:

ps  x:

:

ps f:

  上图所示:显示了vim是bash的子进程ps f是bash的子进程

ps e:

常用组合:

ps aux显示系统中所有进程,并显示进程的用户

ps ef

显示进程的详细信息并显示进程的父子关系
ps ax显示当前系统中的所有进程
pstree显示当前系统的进程树
ps  aux:

ps ef:

ps ax :

ps tree:

显示进程指定信息

    ps -o xxx     ##显示进程的指定信息:

comm进程名称
user进程所有人
group进程所有组
%cpu进程cpu使用率
%mem进程内存使用率
pid进程id
nice进程优先级
ps ax -o comm:

ps ax -o user:

注:-o命令一般连着使用

ps ax -o comm,pid,%mem,%cpu,user,group,nice

注:ps -o 命令显示的左右顺序就是命令中各项的顺序

进程排序  
   

 ps -ax --sort=
                    +%cpu|-%cpu
                    +%mem|-%mem

注:加号代表按照递加的顺序,减号相反

ps ax --sort=%mem

ps ax -o comm,pid,%mem --sort=%mem

注:在未写加减号时,系统默认加号来处理

ps ax -o comm,pid,%cpu --sort=-%cpu

示例:

将占用系统内存前五的进程的pid输出

ps ax -o pid --sort=-%mem |head -n6|tail -n5

stat中显示的信息

S       ##进程状态

l         ##内存中锁定空间

N       ##进程的优先级低

<       ##进程的优先级高

#####3.进程优先级####
1.进程的优先级范围
-20~19

注:-20代表优先级最高,19代表优先级最低

 ps ax -o pid,comm,nice --sort=-nice

2.优先级查看

ps ax -o pid,comm,nice --sort=-nice

           

注:上面两图是我将进程按照优先级从小到大进行排序,然后截取了最小优先级和最大优先级的进程(由上图可知进程的优先击级的范围是-19-20)

3.指定某个优先级开启进程

nice -n 优先级数字 进程名称

以优先级为-5打开vim

renice -n -5 2924

 

改变2904进程的优先级为-5

4.环境进程的前后台调用

jobs查看被打入环境后台的进程
ctrl+z把占用终端的进程打入后台
fg  jobsum把后台的进程调回前台
bg jobsum把后台的停止的进程激活
comm&让进程在后台运行
jobs

在运行jobs之后i可以看到后台运行了三个程序分别是vim,gedit,firefox

ctrl+z
fg gedit

先将gedit调回前台,在运行ctrl+z将gedit打入后台(此时gedit的状态变成stopped,在gedit界面无法操作)

bg gedit

将gedit调回前台,此时gedit可以进行操作

进程信号

1.常用信号等级

1进程重新被加载
2删除进程在内存中的数据
3删除鼠标在内存中的数据
9强行结束单个进程
15正常关闭进程
18运行暂停的进程
19暂停某个进程
20把进程打入后台


man 7 signal    ##查看信号详细信息

man 7 signal        ##查看信号详细信息
kill  信号 进程id对指定进程执行相关操作
killall 信号 进程名字

将输入名称相关进程都关闭

pkill -u student -信号 
kill 2 3361       ###将进程号为3361的进程的内存清除

 

 注:上图可见,将firefox进程(3361)在内存中的数据删除,那么firefox这个进程终止,再删除bash(3050)在内存中占用的数据,但是bash不会终止进程

kill  3     ###将鼠标在内存中的数据删除,鼠标图标会消失(日常用在看电影时,隐藏鼠标)

 注:ctrl+\也可以将鼠标在内存中的数据删除

kill -9 进程id      ###强行结束进程
kill -15 进程id     ###正常关闭进程

上述两个命令都是结束进程,那么他们的区别在那里呢?

 

由上图可知:15 信号可以关闭gedit进程,但是关闭不了bash,但是9信号不会被阻塞会直接结束掉bash

kill -18 32320      ###运行暂停的进程
kill -19 32320      ###暂停目标进程

 

上面操作先暂停了32320进程(此时进程的状态变成了stopped),后面将其运行(状态变为running)

 

killall -9 gedit   ###杀掉gedit这个进程

注:killall这个命令不精确,但是很方便

kill -20 32320    ###将32320号进程打入后台

测试:1.先在bash里运行一个gedit,此时不是在后台运行,下图中可以看见在bash中输入了input,并没有在命令行之后,如果我想将这个进程打入后台,会有如下操作:

 

2.打开另外一个shell,搜索前面gedit的进程号,用kill -20 命令将gedit打入后台

结果:

gedit显示被打入后台,input自动输入到命令行之后

SIGHUP         终止进程             终端线路挂断
SIGINT         终止进程             中断进程
SIGQUIT       建立CORE文件终止进程,并且生成core文件
SIGILL       建立CORE文件           非法指令
SIGTRAP       建立CORE文件           跟踪自陷
SIGBUS       建立CORE文件           总线错误
SIGSEGV       建立CORE文件           段非法错误
SIGFPE       建立CORE文件           浮点异常
SIGIOT       建立CORE文件           执行I/O自陷
SIGKILL       终止进程             杀死进程
SIGPIPE       终止进程             向一个没有读进程的管道写数据
SIGALARM       终止进程             计时器到时
SIGTERM       终止进程             软件终止信号
SIGSTOP       停止进程             非终端来的停止信号
SIGTSTP       停止进程             终端来的停止信号
SIGCONT       忽略信号             继续执行一个停止的进程
SIGURG       忽略信号             I/O紧急信号
SIGIO         忽略信号             描述符上可以进行I/O
SIGCHLD       忽略信号             当子进程停止或退出时通知父进程
SIGTTOU       停止进程             后台进程写终端
SIGTTIN       停止进程             后台进程读终端
SIGXGPU       终止进程             CPU时限超时
SIGXFSZ       终止进程             文件长度过长
SIGWINCH       忽略信号             窗口大小发生变化
SIGPROF       终止进程             统计分布图用计时器到时
SIGUSR1       终止进程             用户定义信号1
SIGUSR2       终止进程             用户定义信号2
SIGVTALRM     终止进程             虚拟计时器到时

1) SIGHUP
本信号在用户终端连接(正常或非正常)结束时发出
通常是在终端的控制进程结束时
通知同一session内的各个作业
这时它们与控制终端不再关联.
2) SIGINT
程序终止(interrupt)信号
在用户键入INTR字符(通常是Ctrl-C)时发出
3)
SIGQUIT 和SIGINT类似
但由QUIT字符(通常是Ctrl-)来控制
进程在因收到SIGQUIT退出时会产生core文件
在这个意义上类似于一个程序错误信号.
4)
SIGILL 执行了非法指令
通常是因为可执行文件本身出现错误或者试图执行数据段
堆栈溢出时也有可能产生这个信号.
5)
SIGTRAP 由断点指令或其它trap指令产生
由debugger使用.
6)
SIGABRT 程序自己发现错误并调用abort时产生.
6)
SIGIOT 在PDP-11上由iot指令产生在其它机器上和SIGABRT一样.
7)
SIGBUS 非法地址
包括内存地址对齐(alignment)出错.
eg: 访问一个四个字长的整数但其地址不是4的倍数.
8)
SIGFPE 在发生致命的算术运算错误时发出.
不仅包括浮点运算错误, 还包括溢出及除数为0等其它所有的算术的错误
9)
SIGKILL 用来立即结束程序的运行. 本信号不能被阻塞, 处理和忽略.
10)
SIGUSR1 留给用户使用
11)
SIGSEGV 试图访问未分配给自己的内存, 或试图往没有写权限的内存地址写数据.
12)
SIGUSR2 留给用户使用
13)
SIGPIPE Broken pipe
14)
SIGALRM 时钟定时信号, 计算的是实际的时间或时钟时间
alarm函数使用该信号.
15)
SIGTERM 程序结束(terminate)信号
与SIGKILL不同的是该信号可以被阻塞和处理
通常用来要求程序自己正常退出
shell命令kill缺省产生这个信号.
17)
SIGCHLD 子进程结束时, 父进程会收到这个信号.
18)
SIGCONT 让一个停止(stopped)的进程继续执行. 本信号不能被阻塞.
可以用一个handler来让程序在由stopped状态变为继续执行时完成特定的工作
例如, 重新显示提示符
19)
SIGSTOP 停止(stopped)进程的执行
注意它和terminate以及interrupt的区别:
该进程还未结束, 只是暂停执行. 本信号不能被阻塞, 处理或忽略.
20)
SIGTSTP 停止进程的运行
但该信号可以被处理和忽略
用户键入SUSP字符时
(通常是Ctrl-Z)发出这个信号
21)
SIGTTIN 当后台作业要从用户终端读数据时,
该作业中的所有进程会收到SIGTTIN信号
缺省时这些进程会停止执行.
22)
SIGTTOU 类似于SIGTTIN, 但在写终端(或修改终端模式)时收到.
23)
SIGURG 有"紧急"数据或out-of-band数据到达socket时产生.
24)
SIGXCPU 超过CPU时间资源限制
这个限制可以由getrlimit/setrlimit来读取/改变
25)
SIGXFSZ 超过文件大小资源限制.
26)
SIGVTALRM 虚拟时钟信号. 类似于SIGALRM, 但是计算的是该进程占用的CPU时间.
27)
SIGPROF 类似于SIGALRM/SIGVTALRM
但包括该进程用的CPU时间以及系统调用的时间.
28)
SIGWINCH 窗口大小改变时发出.
29)
SIGIO 文件描述符准备就绪, 可以开始进行输入/输出操作.
30)
SIGPWR Power failure

有两个信号可以停止进程:SIGTERM和SIGKILL。
SIGTERM比较友好,进程能捕捉这个信号
根据您的需要来关闭程序。
在关闭程序之前您可以结束打开的记录文件和完成正在做的任务
在某些情况下,假如进程正在进行作业而且不能中断,那么进程可以忽略这个SIGTERM信号。

对于SIGKILL信号,进程是不能忽略的。
这是一个 “我不管您在做什么,立刻停止”的信号
假如您发送SIGKILL信号给进程,Linux就将进程停止在那里

6.进程的动态监控

1.top

1显示cpu每个核的负载
s调整刷新频率
ccpu负载排序
m内存使用量排序
h查看帮助
u查看指定的用户进程
k对指定进程发起信号
q退出
1 查看各个cpu的使用情况

s    ###更改刷新时间

c   ###cpu使用排序

上图中进程是按照cpu使用率从高到低排序的

m    ###内存使用排序

u    ###查看指定用户的进程

查看student用户的相关进程

进程控制命令

准备工作:

开启两台虚拟机,一台当作用户端,一台当作服务器端(开启sshd服务)

   ssh--------->sshd
   client      server


   systemctl    服务控制命令
   systemctl   status  sshd  ##查看服务状态,inactive(不可用),active(可用)


   systemctl   start  sshd  ##开启服务


   systemctl   stop   sshd  ##关闭服务


   systemctl   restart sshd  ##重启服务
   systemctl   reload sshd   ##重新加载服务配置


   systemctl   enable sshd   ##设定服务开机启动


   systemctl   list-units    ##列出已经开启服务当前的状态


   systemctl   list-unit-files   ##列出所有服务开机启动的状态


   systemctl   list-dependencies  ##列出服务的依赖


    systemctl  mask sshd     ####冻结服务(指的是将服务的状态冻结而不是将服务本身冻结)
    systemctl  umask sshd   ####解冻服务

将sshd服务先冻结,显示状态是mask,然后重启sshd服务,显示sshd.server is masked ,然后将sshd解锁,重新启动sshd,这时候命令就能正常运行了。

   systemctl  set-default multi-user.target  ##设定系统启动级别为多用户模式(无图形)
   systemctl  set-default graphicial.target  ##设定系统启动级别为图形模式

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值