Linux学习日志(十一)

进程管理

 二进制的格式为ELF,是CPU指令集中的指令
 程序=指令+数据,

 mmap 共享内存
 通过fork()进程生成

init是所有进程的父进程

 task_struct任务结构:是一种数据结构
 双向循环链表   

top:

      M:按内存占用百分比大小排序
      P:按cpu占用百分比大小排序,默认
      T:按累计占有时长进行排序
      1:分开显示
      l: 是否显示负载信息
      t:是否显示cpu和进程的统计信息
      m:是否显示内存和交互分区的信息
      q:退出
      k:kill,杀掉进程
      s:改变top刷新频率
常用选项:
             -d #:指定刷新时间间隔
             -b:以批次显示top的刷新
             -n # 指定指定的次数

htop

u:选择指定用户的进程
l: 显示进程所打开的文件列表
s:显示进程执行的系统调用
a:显示进程的进程的cpu上
#:快速将光标定位之指定的PID进程上
quit

vmstat

 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 341004  27500 312528    0    0   110    10   60  100  1  1 98  0  0

procs

r:运行或等待cpu时间片的进程的个数
b:被阻塞(通常为等待I/O完成)的进程的长度

memory

swpd:从物理内存交互至swap中的数据量
free:未使用的内存大小
buffer:buffer空间大小,通常与缓存写操作相关
cache:cache空间大小,通常与缓存读操作相关

swap

si:swap in 数据进入swap中的数据量,通常是速率。kb/s
so:swap out 数据离开swap中的数据量,通常是速率。kb/s

io:

bi:block in:从块设备读入的数据量,通常是速率,kb/s
bo:block out:保存至块设备中的数据量,通常是速率,kb/s

SYSTEM

in:中断发生频率。每秒的中断数
cs:context switch 上下文切换,进程切换,通常是速率,kb/s

cpu:

us:用户空间的使用率
sy:内核空间的使用率
id:空闲
wa:等待的
st:被偷走的

使用格式

   vmstat [delay [counts]]
     -s:显示内存统计数据

ps:显示进程状态的命令

进程:

   与终端相关的进程:a
   与终端无关的进程:x
      u:以用户为中心显示进程相关信息

u:

            %CPU: cputime/realtime
            $MEM:  
            VSZ:虚拟内存集,Virutal    menmory Size
             RSS:常驻内存集,
             STIME:启动时间
             TIME:累计占用的内存时间 []表示内核线程

STAT

   R:运行或可运行态
   S:可终端
   D:不可终端
   T:停止
   Z:僵死
   s:session leader 有子进程
   +:前台进程
   l:多线程进程
   N:低优先级进程
   <: 高优先级进程

常用组合一:ps aux
常用组合之二:ps -ef

 -e:显示所有进程
 -f:以进程的长格式显示 

常用组合之三:ps -eFH

      -F:显示额外信息
      -H:显示进程的层次信息

自定义要显示的信息:-o

       ps  auo pid command
       rtprio:实时优先级
       ni:nice值
       pri:优先级
       psr:运行的cpu

pstree:显示进程树

Pgrep pattern

   列如:   pgrep bash 
   选项:
      -U UserName :显示相关用户的进程
      -G GROUPNAME:相关组的进程 

pgroup:

   -U Username:仅显示指定用户的进程的进程的PID
   -G Groupname:仅显示指定用户组的进程的进程的PID

pidof:显示指定命令所启动的pid

pidof command

进程Nice

用来手动调整进程优先级
  -20,19
  100,139

  默认nice为0.其默认优先级为120

  nice:普通用户只能调大此值

  对于尚未启动的程序
     nice -n # COMMAND 表示进程以#进程启动

   对于运行中的进程:
      renice # PID 调整PID的nice值

    查看 ps axo ni command pid

进程间通信(IPC):
信号:

  kill命令:可以实现向其他进程发送信息

   kill -l :可以查看向进程发送的所有信息
   man 7 sigual

   kill -SIGNAL PID
      -SIGNAL:
            数字代号:比如1,9等
          信号名称:如SIGHUP等
          简写的信号名称:如HUP等

    1) SIGHUP:让程序重读配置文件,而不用重启程序
    2) SIGINT:中断信号。Ctrl+c即发送次信号   
    9) SIGKILL:杀死进程 
    15) SIGTERM:终止进程,比较优雅(默认)

Linux的作业控制

前台作业:占据着一个终端
后台作业:作业执行时不占据终端,作业启动后就释放终端

非守护进程类的程序,启动以后都在前台工作

      如果已经启动:前台-->后台。ctrl+z把前台作业送往后台,作业被”停止“
      如果尚未启动:COMMAND &

      退出当前会话,作业也会终止,因为作业与当前终端相关,如果把作业送往后台后,不期望作业随终止结束而停止

        nohup COMMAND &

如何让送往后台的作业继续执行:

    fg  [[%]作业号码]:将作业调回前台继续进行
    bg [[%]作业号码]:让作业在后台继续进行
      #默认的为最后一个进入后台的任务
    kill %作业号码:终止作业

bash脚本编程

case语句

条件测试:

   0:成功
   1-255:失败

case语句语法格式:

     case 表达式 in 
     模式1)
         条件1
         ;;
     模式2)
         条件2
         ;;
     模式n)
         条件n
         ;;
      *)
        剩余条件
        ;;
     esac

case中各模式可以使用模式:

  a|b:a或者b
  *:匹配任意长度的任意字符
  ?:匹配任意单个字符
  [-]:范围匹配

bash脚本编程之函数:

  函数是能够实现模块化编程的工具

  函数:function,功能组件

  可被调用:函数有函数名
       函数出现的地方:而自动被替换成函数定义的代码

函数定义:

语法:
  FuncName(){
    函数体
}
  function FuncName{
    函数体
}

函数有两种返回值:

       正常返回的数值:
          函数中的打印语句,如echo或print
       最后一句执行成功
      执行状态的烦返回值:
      取决于函数中执行的最后一条语句
      自定义: return N

函数可以接受参数:

   在函数体可以使用类似脚本调用位置参数一样的参数
   $1,$2.....
   $0
   $?
   $*,

函数:调用 直接写

如何在函数中使用变量:变量作用域

在函数中使用了在主程序中声明的变量:重新赋值会影响主程序中的变量
  如果不期望函数与主程序中的变量冲突,函数中使用变量都用local装饰;即使用局部变量
 在函数中使用了序中在主程没有声明的变量:在函数执行结束后即被撤销,无论是否使用local装饰符

问题一:如果想把脚本的全部位置参数,统统传递给脚本中函数使用,怎么办?

    使用$*传递

练习

练习:写一个脚本
1.提示用户输入一个nice值
2.显示指定nice指定进程名及pid
3.提示用户选择要修改器nice至的进程的pid和nice值
4,执行修改
5。别退出,继续修改

#!/bin/bash
if [[ $UID -eq 0 ]];then
   echo "keyi suibian tiao nice !"
else
   echo "zhineng tiaoda nice !"
fi
while true;do
  read -p "Enter a nice : " nicename
     /bin/ps axo nice,user,command,pid| grep "^[[:space:]]${nicename}\>"
  read -p "Enter a nice : " niceid
  read -p "Ener a PID : " pidid
 /usr/bin/renice $niceid $pidid
done

练习:写一个脚本,判定172.16.0.0网络内有哪些主机在线,在线的用绿色显示,不在线的用红色显示;要求,编程中使用函数;

练习:写一个脚本,完成如下功能(使用函数):
1、提示用户输入一个可执行命令;
2、获取这个命令所依赖的所有库文件(使用ldd命令);
3、复制命令至/mnt/sysroot/对应的目录中
解释:假设,如果复制的是cat命令,其可执行程序的路径是/bin/cat,那么就要将/bin/cat复制到/mnt/sysroot/bin/目录中,如果复制的是useradd命令,而useradd的可执行文件路径为/usr/sbin/useradd,那么就要将其复制到/mnt/sysroot/usr/sbin/目录中;
4、复制各库文件至/mnt/sysroot/对应的目录中,其要求命令;

练习:写一个脚本,完成如下功能(使用函数):
1、脚本使用格式:

2、如果文件事先不存在,则创建;且前几行内容如下所示:

3、如果事先存在,但不空,且第一行不是“#!/bin/bash”,则提示错误并退出;如果第一行是“#!/bin/bash”,则使用vim打开脚本;把光标直接定位至最后一行
4、打开脚本后关闭时判断脚本是否有语法错误
如果有,提示输入y继续编辑,输入n放弃并退出;
如果没有,则给此文件以执行权限;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值