linux 从头开始その十二

写在前面:

进程会借由父进程以复制的方式产生一个一摸一样的子进程,然后复制出来的子进程再以exec的方式来执行实际要执行的进程, 最终就成为一个子进程。

一 job control管理

1 后台执行命令 &

执行后, 系统会告诉你job number, 执行完还会告诉你执行完毕

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

tar -zpcvf /tmp/etc.tar.gz /etc/ > /tmp/log.txt 2>&1 &
加个v会在屏幕显示, 所以要用数据流重定向

2 将目前的任务放到后台暂停, ctrl + z

vim ~/ .bashrc 
# 在一般模式下 按 ctrl + z
# 将这个任务暂停放到后台

3 查看目前的后台状态 jobs

-l    除了列出job numbers与命令串之外,同时列出PID号码

-r   仅列出正在后台run的任务

-s   仅列出正在后台中暂停的任务

+代表默认的食用任务,最近放到后台的任务, - 代表第二个被放到后台的任务号码

job -l 
[1] - 14566 Stopped   vim ~/.bashrc
[2] + 14567 Stopped   find / -print

4 将后台任务放到前台处理 fg

jobs -l

fg       # 默认取出的是带+号的任务,即执行最新添加的任务
fg %1    # 取出job号为1的job
fg -     # 执行-的任务, 就是倒数第二新的任务

5 让任务在后台下的状态变成运行中 bg

jobs
bg %3           让暂停的3号job变成运行状态

6 管理后台的任务kill

kill -signal %jobnumber

kill -l    列出可选的所有信号

signal:

-1     重新读取一次参数配置的文件

-2    代表由键盘输入ctrl + c

-9    立刻删除一个任务

-15   以正常的进程方式终止一项任务

kill -9 %2     杀死job号是2的
kill -SIGTERM %2   等价于 kill -15 %2 
kill pid           直接加进程号也行

7 killall  

-i 删除是会有提示

-I  大写i, 忽略大小写

killall -1 rsyslogd      给这个命令一个信号
killall -9 xx 

kill 和 killall 的差别!

kill  后面只能加pid 或者 job号, 也就是说只能删除一个进程

而killall 后面加一个命令, 可以删除以这个命令启动的所有进程

 

8 脱机运行 nohup

用&执行命令, 虽然放到后台运行任务, 但是,一旦关了终端,任务就终止了。所以要用

nohup .......  &   一直让任在后台务运行,  我云上部署的django就是这个命令

nohup .......       一直让任务在前台运行

 

二 进程管理

1 ps

-A  显示所有的进程

-a  不显示与终端有关的进程

-u   有效使用者的相关进程

x    列出完整的信息

主要记住这两个就好了:

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

ps -l                 只能查看自己bash的进程

 

ps -l     

[root@ ~]# ps -l
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0 15054 15051  0  80   0 - 28894 do_wai pts/1    00:00:00 bash
0 R     0 15981 15054  0  80   0 - 38309 -      pts/1    00:00:00 ps

F: 代表这个进程标识,说明这个进程的权限,常见号码:

4:进程权限为root

1:  表示此子进程仅执行复制而没有执行

0:既不是fork之后未执行的进程,也不是使用的超级用户权限

S: 代表状态

R: 该进程正在运行中

S: 该进程正在睡眠状态,可以被signal唤醒

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

T: 停止状态

Z: 僵尸状态,僵尸进程, 进程终止但却无法删除至内存外

C: cpu 李勇百分比

PRI/NI:   优先级

ps aux   

[root@ ~]# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         2  0.0  0.0      0     0 ?        S    Aug14   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    Aug14   1:28 [ksoftirqd/0]

STAT: 进程状态

ps aux 默认会按pid排序

 

2 top 动态查看进程变化

默认是按cpu使用率排序的

-d  后面接秒数, 就是整个进程界面更新秒数,默认是5秒

-b  以批量的方式执行top

-n  与-b搭配,需要执行几次top输出的结果

-p  指定某些个PID来执行检测

在执行top可以使用的按键命令:

?    显示top可以输入的按键命令

P  以cpu使用排序显示

M  以Memory排序

N   以PID排序

T   以进程的使用的CPU时间累积排序

k   给予某个pid一个信号

r    给予某个pid重新定一个nice值

q   退出top

输入 top -d 2 制定没两秒刷新一次

第一行(top开始的):目前时间 ,开机到目前的时间,登陆的用户人数,系统在1,5,15分钟的平局任务负载

第二行: 显示当前的进程总量,和个别进程的状态

第三行: 显示cpu的负载 wa 是 I/O wait

第四第五行: 表示物理内存和虚拟内存

top的下半部分:

PR: 进程的优先级别,越小优先级越高, 系统自动生成的用户没法改

NI: 也是进程的优先级, 越小优先级越高, 用户可以自己修改, 所以总的优先级PR+NI

echo $$           看当前bash的pid
14836
top -d 2 -p 14836             看指定pid的进程
按r调NI

3 pastree 查看进程树

进程树可以看到一个进程的父进程

-A     指定字符为ASCII

-U    指定字符为Unicode

-p    同时列出每个pid

-u    列出每个进程的所属账号关系

 

三 关于进程的优先级

PRI是内核动态调整的,用户无法修改,

NI, 用户可以修改。

NI:

  • 取值范围 -20 ~ 19
  • root可调整自己和其他人的NI
  • 其他人只能调整自己的, 范围0~19, 且不能调小

调整NI有两个命令:nice 和 renice

1 nice  命令创建时指定

-n   一个数, -20 ~ 19

nice -n -5 vim &       指定这个命令创建的进程NI=5

2 renice 对已经存在的nice重新调整, 后面接pid

-pid

renice -5  pid           直接加数字,这个是-5, 再加pid

 

四 netstat  追踪网络或scoket

-a  将目前系统上所有的连接,监听,socket信息都列出来

-t   列出tcp网络封包信息

-u   列出udp网络封包信息

-n    不以进程服务名称,以端口号来显示

-l      列出目前正在网络监听的服务

-p    列出该网络服务的进程pid

netstat -anp | grep 服务的名字

netstat -lnp | grep  端口号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值