Linux进程管理

Linux进程管理
本文详细介绍Linux系统中的进程管理方法,包括进程的查看、排序、父子关系分析、PID查询、信号控制等核心操作。此外,还介绍了如何利用top命令动态监控进程状态,以及如何调整进程优先级。

指令:


1.ps-process:静态查看进程 ps aux:列出所有进程 ps aux --sort 参数:排序 ps -ef:查看进程父子关系 ps axo 参数:自定义显示字段
2.cat /run/参数、{pgrep、ps aux、pidof} +参数:查看指定进程的pid
3.top:动态查看进程 -d (每秒刷新){ -p(查看指定进程信息)-u(查看指定用户的进程) -b -n 参数 (只刷新几次)}
4.top 进入后 :M :按内存的使用排序 P :按CPU使用排序 N :以PID的大小排序 R :对排序进行反转 f :自定义显示字段 1 :显示所有CPU的负载 < :向前 >: 向后 W :保存top环境设置
5.kill 进程pid:信号控制进程 -1:重新加载进程 -9:非法杀死进程 -15:正常终止进程 -18:运行信号 -19:暂停信号
6.w:查看登陆信息 pkill -u 用户:杀掉一个连接用户 pkill -t tty :终止此上所有进程 pkill -9 -t tty :杀死终端
7.打开top 按k 按9 回车 killall (vim)进程名:给所有vim发送信号
8.nice -n -数值 进程:手动启动不同nice renice -数值 pidtop修改(r 回车 数值 回车) :更改现有进程数值
9. &:后台运行 jobs:查看后台作业 bg-background:让作业在后台从暂停到运行 fg-foreground:将作业调回前台 kill %:结束
*********************************************************************************************************************************************************************************************

 

查看进程 process


静态查看进程 ps

[root@tianyun ~]# ps aux |less
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.6 128096 6708 ? Ss 16:20 0:01 /usr/lib/systemd/systemd
————————————————————————————
USER: 运行进程的用户
PID: 进程ID
%CPU: CPU占用率
%MEM: 内存占用率
VSZ: 占用虚拟内存
RSS: 占用实际内存
TTY: 进程运行的终端 //可以开启vim 查询到终端名称
STAT: 进程状态 man ps (/STATE)

———————————————————————————
R 运行
S 可中断睡眠 Sleep,(休眠中, 受阻, 在等待某个条件的形成或接受到信号)
D 不可中断睡眠,(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)
T 停止的进程
Z 僵尸进程
X 死掉的进程

————————————————————————————
[了解]
Ss s进程的领导者,父进程
S< <优先级较高的进程
SN N优先级较低的进程
R+ +表示是前台的进程组
Sl 以线程的方式运行

————————————————————————————
START: 进程的启动时间 //可以开启vim ,在用date验证。
TIME: 进程占用CPU的总时间
COMMAND: 进程文件,进程名

重点
ps工具标识进程的5种状态码:
D 不可中断 uninterruptible sleep (usually IO)
R 运行 runnable (on run queue)
S 中断 sleeping
T 停止 traced or stopped
Z 僵死 a defunct (”zombie”) process
参数说明
ps a 显示现行终端机下的所有程序
ps u 以用户为主的格式来显示程序状况。
ps x 不以终端机来区分。
进程排序
示例1
————————————————————————————
1 以CPU占比降序排列
[root@tianyun ~]# ps aux --sort %cpu |less //--sort排序,升序(小到大)

——————————————————————————————
示例2
2 以CPU占比升序排列
[root@tianyun ~]# ps aux --sort -%cpu |less //-%CPU降序
3 以驻留内存升序排列
[root@tianyun ~]# ps aux --sort rss |less
4 以驻留内存降序排列
[root@tianyun ~]# ps aux --sort -rss |less
进程的父子关系1

安装一个进程观察,父子进程以及状态。父亲Ss 和 儿子S
[alice@tianyun ~]$ sudo yum -y install httpd //安装网站程序。
[alice@tianyun ~]$ sudo systemctl start httpd //启动网站
[alice@tianyun ~]$ sudo systemctl stop firewalld //关闭防火墙
[root@tianyun ~]# ps aux |grep httpd //查看网站程序。
root 9279 0.0 0.0 4264 672 pts/1 S+ 14:37 0:00 \_ grep httpd
root 8310 0.0 0.1 10092 2912 ? Ss 14:19 0:00 /usr/sbin/httpd
apache 8311 0.0 0.0 10092 2060 ? S 14:19 0:00 \_ /usr/sbin/httpd
apache 8312 0.0 0.0 10092 2060 ? S 14:19 0:00 \_ /usr/sbin/httpd
apache 8313 0.0 0.0 10092 2060 ? S 14:19 0:00 \_ /usr/sbin/httpd
apache 8314 0.0 0.0 10092 2060 ? S 14:19 0:00 \_ /usr/sbin/httpd
apache 8315 0.0 0.0 10092 2060 ? S 14:19 0:00 \_ /usr/sbin/httpd
apache 8316 0.0 0.0 10092 2060 ? S 14:19 0:00 \_ /usr/sbin/httpd
apache 8318 0.0 0.0 10092 2060 ? S 14:19 0:00 \_ /usr/sbin/httpd
apache 8319 0.0 0.0 10092 2060 ? S 14:19 0:00 \_ /usr/sbin/httpd

进程的父子关系2
查看进程的父子关系。 请观察PID和PPID
[root@xulei ~]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 1月22 ? 00:00:07 /usr/lib/systemd/systemd
root 2 0 0 1月22 ? 00:00:00 [kthreadd]
root 3 2 0 1月22 ? 00:00:06 [ksoftirqd/0]
自定义显示字段

//自定义显示字段 --------------------------------
[root@tianyun ~]# ps axo user,pid,ppid,%mem,command //xo指定列显示
[root@tianyun ~]# ps axo user,pid,ppid,%mem,command |grep httpd
root 8310 1 0.1 /usr/sbin/httpd
apache 8311 8310 0.0 /usr/sbin/httpd
apache 8312 8310 0.0 /usr/sbin/httpd
apache 8313 8310 0.0 /usr/sbin/httpd
apache 8314 8310 0.0 /usr/sbin/httpd
apache 8315 8310 0.0 /usr/sbin/httpd
apache 8316 8310 0.0 /usr/sbin/httpd
apache 8318 8310 0.0 /usr/sbin/httpd
apache 8319 8310 0.0 /usr/sbin/httpd
root 9236 6798 0.0 grep httpd
-----------------------------------------------------------
[root@tianyun ~]# ps axo user,pid,ppid,%mem,%cpu,command --sort -%cpu |less //针对某些程序,显示某些列,再进行排序。简洁明了

查看指定进程的PID,四种方法



//查看指定进程的PID,四种方法————————
第一种。cat
[root@localhost ~]$ cat /run/sshd.pid
830

第二种。ps
[root@localhost ~]# ps aux |grep sshd
root 10180 0.0 0.0 7224 1024 ? Ss 16:00 0:00 /usr/sbin/sshd
第三种。pgrep

[root@localhost ~]# pgrep -l sshd
10180 sshd
[root@localhost ~]# pgrep sshd
10180

第四种。pidof
[root@localhost ~]# pidof sshd
10180


查看进程树
[root@localhost ~]# pstree
如果没有这个命令
请安装
yum install -y psmisc
动态查看进程 top
上半部分

第一部分:系统整体统计信息
top - 11:45:08 up 18:54, 4 users, load average: 0.05, 0.05, 0.05
Tasks: 176 total, 1 running, 175 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 3865520 total, 1100000 free, 580268 used, 2185252 buff/cache
KiB Swap: 4063228 total, 4063228 free, 0 used. 2917828 avail Mem
负载加权值解释:—小于1正常————————————
load average: 0.86, 0.56, 0.78 系统最近 1分钟,5分钟,15分钟平均负载
第一行是任务队列信息
当前时间
系统运行时间,格式为时:分
当前登录用户数
系统负载,即任务队列的平均长度。三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。
第二、三行为进程和CPU的信息
total 进程总数
running 正在运行的进程数
sleeping 睡眠的进程数
stopped 停止的进程数
zombie 僵尸进程数
Cpu(s):
us 用户空间占用CPU百分比
sy 内核空间占用CPU百分比
ni 用户进程空间内改变过优先级的进程占用CPU百分比
id 空闲CPU百分比
wa 等待输入输出的CPU时间百分比
hi:硬件CPU中断占用百分比
si:软中断占用百分比
st:虚拟机占用百分比
两行为内存信息
Mem:
KiB Mem代表物理内存,KiB Swap代表交换空间,它们的单位都是KiB。
total、used和free没什么好介绍的,就是总共多少,然后用了多少,还剩多少。
buff/cached代表了buff和cache总共用了多少,buff一般都比较小,跟cache比可以忽略不计;cache代表是用来缓存磁盘上文件内容的,所以占有空间很大,Linux一般会尽可能多的将空闲物理内存用于 cache。

Swap:
total 交换区总量
used 使用的交换区总量
free 空闲交换区总量
avail Mem表示可用于进程下一次分配的物理内存数量,这个大小一般比free大一点,因为除了free的空间外,系统还能立即释放出一些空间来。
那么怎么判断当前内存使用情况出现了异常呢?有下面几点供参考:


Mem free的值比较小,并且buff/cache的值也小
free的值比较少并不一定代表有问题,因为Linux会尽可能多的将内存用于 cache,但是如果buff/cache的值也小,就说明内存吃紧了,系统没有足够多的内存用于cache,如果当前服务器部署是一个需要频繁的读写磁盘的应用,如FTP服务器,那么对性能的影响将会非常大!!!

Swap used的值比较大,
这种情况比上面的更严重,正常情况下swap应该很少被使用,used值比较大说明交换空间被使用的比较多,如果通过vmstat命令看到swap in/out的比较频繁的话,说明系统内存严重不足,整体性能已经受到严重影响

关于buffers的小实验
做个小实验,观察缓存的作用。
time cp -rf /etc /tmp/etc1
time cp -rf /etc /tmp/etc1
注意观察两次复制的时间,大大缩小,是因第二次的数据已经到了buffer了。
在top的buffer/cache会有体现。
官方负载解释截图

下半部分
字段介绍
PID,USER,%CPU,%MEM略
VIRT:virtual memory usage 虚拟内存
1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等
2、假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而不是实际的使用量
需要这些内存,但并没有占满。
RES:resident memory usage 常驻内存
1、进程当前使用的内存大小
2、包含其他进程的共享
3、如果申请100m的内存,实际使用10m,它只增长10m,与VIRT相反
用了多少内存
SHR:shared memory 共享内存
1、除了自身进程的共享内存,也包括其他进程的共享内存
2、计算某个进程所占的物理内存大小公式:RES – SHR
常用指令
第二部分:进程信息
命令
h|?帮助
M 按内存的使用排序
P 按CPU使用排序
N 以PID的大小排序
R 对排序进行反转
f 自定义显示字段
1 显示所有CPU的负载


< 向前
> 向后
z 彩色,Z设置彩色,使用数字调整
W 保存top环境设置

top技巧
动态查看进程 top,像windows的任务管理器
[root@tianyun ~]# top //回车,立刻刷新。按z彩色显示,按F,通过光标设置列的顺序。
[root@localhost ~]# top -d 1 //每1秒刷新。
[root@localhost ~]# top -d 1 -p 10126 查看指定进程的动态信息
[root@localhost ~]# top -d 1 -p 10126,1 查看10126和1号进程
[root@localhost ~]# top -d 1 -u apache 查看指定用户的进程
[root@localhost ~]# top -d 1 -b -n 2 > top.txt //-b附加参数,只看2次top信息后写入到文件

[root@localhost ~]#vim top.txt //最后打开文件详细阅读
top交互命令(了解)
Ctrl+L 擦除并且重写屏幕。
h或者? 显示帮助画面,给出一些简短的命令总结说明。
k 终止一个进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什么样的信号。一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽。
i 忽略闲置和僵死进程。这是一个开关式命令。
q 退出程序。
r 重新安排一个进程的优先级别。系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值。输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权。默认值是10。
S 切换到累计模式。
s 改变两次刷新之间的延迟时间。系统将提示用户输入新的时间,单位为s。如果有小数,就换算成m s。输入0值则系统将不断刷新,默认值是5 s。需要注意的是如果设置太小的时间,很可能会引起不断刷新,从而根本来不及看清显示的情况,而且系统负载也会大大增加。
f或者F 从当前显示中添加或者删除项目。
o或者O 改变显示项目的顺序。
l 切换显示平均负载和启动时间信息。
m 切换显示内存信息。
t 切换显示进程和CPU状态信息。
c 切换显示命令名称和完整命令行。
M 根据驻留内存大小进行排序。
P 根据CPU使用百分比大小进行排序。
T 根据时间/累计时间进行排序。
W 将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法。

使用信号控制进程
信号种类

给进程发送信号
[root@tianyun ~]# kill -l //列出所有支持的信号
编号 信号名
1) SIGHUP 重新加载配置
2) SIGINT 键盘中断Ctrl+C
3) SIGQUIT 键盘退出Ctrl+\,类似SIGINT
9) SIGKILL 强制终止,无条件
15) SIGTERM 终止(正常结束),缺省信号
18) SIGCONT 继续
19) SIGSTOP 停止,该进程还未结束, 只是暂停执行
20)SIGTSTP 键盘暂停Ctrl+Z

重点1,9,15。请注意1和15的区别
作业1(信号1,15)
作业1: 给vsftpd进程发送信号1,15(重新加载配置,再停止。)
1 安装文件服务器并启动。
[root@localhost ~]# yum install -y vsftpd
[root@localhost ~]# systemctl start vsftpd (服务器的公共目录在/vat/ftp)
[root@localhost ~]# systemctl stop firewalld

2 查询文件服务器进程。
[root@localhost ~]# ps aux |grep vsftpd
root 9160 0.0 0.0 52580 904 ? Ss 21:54 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
注意观察进程PID

3 重启进程。观察进程ID未变
[root@localhost ~]# kill -1 9160 //发送重启信号**************
例如vsftpd的配置文件发生改变,希望重新加载
root 9160 0.0 0.0 52580 904 ? Ss 21:54 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

4 发送停止信号。搜索不到进程了。
[root@localhost ~]# kill 9160 //发送停止信号****************
vsftpd服务有停止的脚本 systemctl stop vsftpd
[root@localhost ~]# ps aux |grep vsftpd
作业2(信号1,15)
作业2:对任务计划进程(crond)发送1和15信号。
//1
[root@localhost ~]$ ps aux |grep crond
root 478 0.0 0.1 124144 1572 ? Ss 09:35 0:00 /usr/sbin/crond -n
[root@localhost ~]$ kill -1 478
[root@localhost ~]$ ps aux |grep crond
root 478 0.0 0.1 124144 1572 ? Ss 09:35 0:00 /usr/sbin/crond -n

//15
[root@localhost ~]$ kill 478
[root@localhost ~]$ ps aux |grep crond
[root@localhost ~]$ systemctl start crond
[root@localhost ~]$ ps aux |grep crond
root 22319 0.0 0.1 124140 1548 ? Ss 14:54 0:00 /usr/sbin/crond -n
作业3(9,15)
作业2:信号测试9,15
1 创建2个文件,查看终端号。
[root@tianyun ~]# touch file1 file2
[root@tianyun ~]# tty
/dev/pts/1

2 通过一个终端,打开一个vim
[root@tianyun ~]# vim file1

3 通过另一个终端,打开一个vim
[root@tianyun ~]# tty
/dev/pts/2
[root@tianyun ~]# vim file2

3 通过另一个终端,查询两个进程。
[root@tianyun ~]# ps aux |grep vim
root 4362 0.0 0.2 11104 2888 pts/1 S+ 23:02 0:00 vim file1
root 4363 0.1 0.2 11068 2948 pts/2 S+ 23:02 0:00 vim file2

4 发送信号15 和信号9 ,观察两个终端程序状态。
[root@tianyun ~]# kill 4362
[root@tianyun ~]# kill -9 4363
观察两个终端,一个正常终止,一个非法杀死。
——————————————————————————————
5 重复第1-3步,使用killall 杀死所有vim进程。
[root@tianyun ~]# killall vim //给所有vim进程发送信号
[root@tianyun ~]# killall httpd
建议尽量不要使用kill -9
作业4(18,19)
作业3:信号测试18继续,19暂停
1 查询远程登录程序SSH的进程号(使用不同终端登陆服务器)
[root@localhost ~]# ps aux |grep sshd
root 5571 0.0 0.0 64064 1164 ? Ss 09:35 0:00 /usr/sbin/sshd

2 发送暂停信号,并查询状态Ts
[root@localhost ~]# kill -STOP 5571 //等同于-19
[root@localhost ~]# ps aux |grep sshd
root 5571 0.0 0.0 64064 1164 ? Ts 09:35 0:00 /usr/sbin/sshd
看到状态为Ts不再接受处理。T停止状态

3 发送继续信号,查看状态,发现终端可以继续运行。
[root@localhost ~]# kill -cont 5571 //等同于-18
[root@localhost ~]# ps aux |grep sshd
root 5571 0.0 0.0 64064 1164 ? Ss 09:35 0:00 /usr/sbin/sshd
又继续运行了。cont 就S 状态了。

作业5(18,19)(了解)
1 查看计划任务程序crond
[root@localhost ~]$ ps aux |grep crond
root 22319 0.0 0.1 124140 1568 ? Ss 14:54 0:00 /usr/sbin/crond -n
yang 22427 0.0 0.0 112648 964 pts/2 R+ 15:07 0:00 grep --color=auto crond

2 暂停计划任务程序。
[root@localhost ~]$
[root@localhost ~]$ sudo kill -19 22319
[root@localhost ~]$ ps aux |grep crond
root 22319 0.0 0.1 124140 1568 ? Ts 14:54 0:00 /usr/sbin/crond -n
yang 22431 0.0 0.0 112648 964 pts/2 R+ 15:07 0:00 grep --color=auto crond

3 继续计划任务程序。观察状态
[root@localhost ~]$
[root@localhost ~]$ sudo kill -cont 22319
[root@localhost ~]$ ps aux |grep crond
root 22319 0.0 0.1 124140 1568 ? Ss 14:54 0:00 /usr/sbin/crond -n
yang 22436 0.0 0.0 112648 960 pts/2 R+ 15:08 0:00 grep --color=auto crond
总结:kill带ID,killall带程序名称
kill (PID or Job ID) killall (name)
作业6:杀死一个用户(了解)
作业4:踢出一个从远程登录到本机的用户
1 查看pkill命令
[root@tianyun ~]# pkill --help
大家多看帮助,翻译可以借助软件。

2 请使用一个普通用户登录系统。杀掉一个连接用户。
ssh alice@192.168.100.10
[root@tianyun ~]# pkill -u alice
杀掉了用户。




作业7:杀死一个终端(了解)
1 查询当前用户。发现多人用同一个账号登录系统。在其中一个普通账户上开启一个sleep程序。
[root@localhost ~]# w
06:48:38 up 4 min, 4 users, load average: 0.07, 0.14, 0.08
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.100.254 06:44 3:58 0.05s 0.05s -bash
root pts/1 192.168.100.254 06:44 6.00s 0.04s 0.00s w
aofa pts/2 192.168.100.254 06:44 6.00s 0.03s 0.00s sleep 3000

2 杀掉用户有个问题,多人用同一个用户。可以用终端pkill掉
[root@localhost ~]# pkill -t pts/2 //终止pts/2上所有进程

3 回到pts/2终端观察进程状态。
[aofa@localhost ~]$ sleep 3000
已终止



4 第三步杀死的只是终端上的程序。要想杀死该用户的终端,使用-9
[root@localhost ~]# pkill -9 -t pts/2
//终止pts/2上所有进程 并结束该pts/2

5 观察用户登录情况。少了aofa用户。
[root@localhost ~]# w
06:51:30 up 7 min, 3 users, load average: 0.07, 0.10, 0.06
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.100.254 06:44 6:50 0.05s 0.05s -bash
root pts/1 192.168.100.254 06:44 2.00s 0.05s 0.01s w



作业8:top杀死一个程序(了解)
top也可杀死进程
1 请使用一个终端,开启一个进程。
[aofa@localhost ~]$ sleep 10000

2 在另一个终端查询并杀死该进程。
[root@localhost ~]# ps aux | grep sleep
root 2004 0.0 0.0 107896 604 ? S 06:51 0:00 sleep 60
aofa 2058 0.0 0.0 107896 604 pts/2 S+ 06:52 0:00 sleep 10000
root 2063 0.0 0.0 112664 972 pts/1 R+ 06:52 0:00 grep --color=auto sleep

3 通过top杀死该进程。
[root@localhost ~]# top -d 1 -p 2058
k
9
回车

命令
kill,killall,pkill,top
进程优先级nice
简介
Linux 进程调度及多任务
每个CPU(或CPU核心)在一个时间点上只能处理一个进程,通过时间片技术,Linux实际能够运行的进程(和线程数)可以超出实际可用的CPU及核心数量。Linux内核!!!进程调度程序!!!将多个进程在CPU核心上快速切换,从而给用户多个进程在同时运行的印象。
CPU 进程 程序调度cfq 调度策略 ----- 》 nice
医生 病人 分诊台 针对不同病人的策略----- 》 挂号单
相对优先级 nice
调度策略
普通策略:
(sched——other常规调度:TS)
高级策略
(sched——fifo先进先出:FS)
sched——other常规调度策略
nice值范围
调度策略
相对优先级 nice
由于不是每个进程都与其他进程同样重要,可告知进程调度程序为不同的进程使用不同的调度策略。常规系统上运行的大多数进程所使用的调度策略为!!! SCHED_OTHER !!!(也称为SCHED_NORMAL),但还有其它一些调度策略用于不同的目的。

SCHED_OTHER 调度策略运行的进程的相对优先级称为进程的!!! nice !!!值,可以有40种不同级别的nice值。

优先级图示

优先级特性
nice 值越高: 表示优先级越低,例如+19,该进程容易将CPU 使用量让给其他进程。
nice 值越低: 表示优先级越高,例如-20,该进程更不倾向于让出CPU。

系统中的两种优先级:nice值和PR值
在top中显示的优先级有两个,PR值和nice值
查看进程的nice级别
1. 使用top查看nice级别
NI: 实际nice值
PR(+20): 将nice级别显示为映射到更大优先级队列,-20映射到0,+19映射到39
查看进程的nice级别


2. 使用ps查看nice级别(自定义,显示pid 和comm以及nice值并排序。)

[root@localhost ~]# ps axo pid,command,nice,cls --sort=-nice
cls表示显示策略列。
TS 表示该进程使用的调度策略为SCHED_OTHER
FF表示高级进程first in first out。

启动具有不同nice级别的进程
示例1:不同的nice值
默认情况
启动进程时,通常会继承父进程的 nice级别,默认为0。观察两个程序的不同nice值。
手动启动不同nice

[root@localhost ~]# nice -n -5 sleep 6000 &
[1] 2220
[root@localhost ~]# nice -n -10 sleep 7000 &
[2] 2229
[root@localhost ~]# ps axo command,pid,nice | grep sleep
sleep 6000 2220 -5
sleep 7000 2229 -10
grep --color=auto sleep 2233 0
更改现有进程的nice级别
1 使用top更改(r/R)
更改现有进程的nice级别
1 打开一个程序
[root@localhost ~]# sleep 12345 &
[1] 2630

2 查询该进程
[root@localhost ~]# ps aux | grep sleep
root 2630 0.0 0.0 107896 604 pts/0 S 07:29 0:00 sleep 12345

3 使用top更改nice级别
[root@localhost ~]# top -d 1 -p 2630
按r键 //调整进程的优先级(Nice Level) (-20高) ---0--- (19低)
回车 //确认该程序。
-20
回车 //确认修改nice值。


如果直接使用top,使用R调整nice值,先输入PID,再输入nice值即可。
2 使用shell更改(renice)
使用shell更改nice级别
1 创建一个睡眠程序。
[root@localhost ~]# sleep 7000 &
[2] 2669

2 修改他的nice值。
[root@localhost ~]# renice -20 2669
2669 (进程 ID) 旧优先级为 0,新优先级为 -20
观察修旧的nice值。

 

 

作业控制 jobs(了解)


简介
在shell中同时运行多个命令。&和ctrl+Z
作业控制是一个命令行功能,允许一个shell 实例来运行和管理多个命令。
如果没有作业控制,父进程fork()一个子进程后,将sleeping,直到子进程退出。(屏幕此时禁止输入指令)
使用作业控制,可以选择性暂停,恢复,以及异步运行命令,让 shell 可以在子进程运行期间返回接受其他命令。

关键词介绍
foreground, background, and controlling terminal

foreground: 前台进程:是在终端中运行的命令,该终端为进程的控制终端。前台进程接收键盘产生的输入和信号,并允许从终端读取或写入到终端。
background: 后台进程:没有控制终端,它不需要终端的交互。


示例1:jobs/bg/fg
[root@tianyun ~]# sleep 2000
运行一个程序,当前终端无法输入。

1 直接运行后台程序。暂停一个前台程序。
[root@tianyun ~]# sleep 3000 & //运行程序(时),让其在后台执行
[root@tianyun ~]# sleep 4000 //^Z,将前台的程序挂起(暂停)到后台
[2]+ Stopped sleep 4000

2 查询所有程序。注意一个是后台运行S,一个后台暂停T。
[root@tianyun ~]# ps aux |grep sleep
root 8895 0.0 0.0 100900 556 pts/0 S 12:13 0:00 sleep 3000
root 8896 0.0 0.0 100900 556 pts/0 T 12:13 0:00 sleep 4000


3 只查看后台进程。
[root@tianyun ~]# jobs //查看后台作业
[1]- Running sleep 3000 &
[2]+ Stopped sleep 4000
4 执行暂停程序,和调动后台程序至前台。
[root@tianyun ~]# bg 2 //让作业2在后台,从暂停到运行
[root@tianyun ~]# fg 1 //将作业1调回到前台

[root@tianyun ~]# kill %1 //kill %1,结束后台作业1.
注意,kill 1 和 kill %1 不同,前者终止PID为1的进程,后者杀死作业。
文件系统 proc (了解)

 

 

 

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值