shell学习笔记(进程)

本文详细介绍了如何查看和管理Linux系统的进程,包括使用`ps`、`top`命令展示进程状态,以及通过`kill`发送不同信号来控制进程,如`HUP`、`TERM`和`KILL`。还探讨了`trap`命令用于捕捉和处理信号,并提供了一个休眠循环脚本作为示例,展示了如何响应`HUP`和`USR1`信号。
$ uptime                 显示开机至今的时间 用户数 及平均负载

进程列表(process status)

$ ps

$ ps -efl                   System V 风格

F S UID        PID  PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD

$ ps aux                  BSD风格

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND

$ top                        显示前几名消耗资源的进程

 

一个简化的top版本-----simple-top

#!/bin/sh -
#持续执行ps命令
#每次显示之间,只作短时间的暂停
#语法:
#     simple-top

IFS='
      '
#自订PATH,以先取得BSD式的ps
PATH=/usr/ucb:/usr/bin:/bin
export PATH

HEADFLAGS="-n 20"
PSFLAGS=aux
SLEEPFLAGS=5
SORTFLAGS='-k3nr'

HEADER="`ps $PSFLAGS | head -n 1`"

while true
do
  clear
  uptime
  echo "$HEADER"
  ps $PSFLAGS |
      sed -e 1d |
           sort $SORTFLAGS |
               head $HEADFLAGS
  sleep $SLEEPFLAGS
done

 

一个脚本显示系统是用者 以及属于他们的进程

#!/bin/sh -
#显示用户,及其活动中的进程数与进程名称
#可选择性地限制显示某些特定用户
#语法:
#     puser [ user1 user2 ... ]

IFS='
       '
PATH=/usr/local/bin:/usr/bin:/bin
export PATH

EGREPFLAGS=
while test $# -gt 0
do
  if test -z "EGREPFLAGS"
  then
    EGREPFLAGS="$1"
  else
    EGREPFLAGS="EGREPFLAGS|$1"
  fi
  shift
done

if test -z "$EGREPFLAGS"
then
  EGREPFLAGS="."
else
  EGREPFLAGS="^ *($EGREPFLAGS) "
fi

case "`uname -s`" in
  *BSD | DARWIN)    PSFLAGS="-a -e -o user,ucomm -x" ;;
  *)                PSFLAGS="-e -o user,comm" ;;
esac

ps $PSFLAGS |
  sed -e 1d |
    EGREP_OPTIONS= egrep "$EGREPFLAGS" |
      sort -b -k1,1 -k2,2 |
        uniq -c |
          sort -b -k2,2 -k1nr,1 -k3,3 |
            awk '{
                  user = ( LAST == $2) ? " " : $2
                  LAST = $2
                  printf("%-15s\t%2d\t%s\n", user, $1, $3)
                 }'


进程控制与删除
$ kill -l                         列出支持的信号名称

$ kill -STOP PID         终止进程ID为PID的进程(暂停)

$ sleep 36000 && kill -CONT PID &            十小时后恢复

 

删除进程

ABRT(中断)                 快速离开,不清除,而是产生进程内存影像的副本,将其置于核心

HUP(搁置)                   要求终止,通常表示进程应向停止现在正在作的事,然后处理新的工作

KILL                             KILL和STOP信号会立即被传送,让进程立即中止

TERM(终结)                快速地清除并离开

一般而言,应先将HUP信号传送给进程,让其可以正常中止,若没有效果,可以使用TERM信号,若仍然没有办法停止,可以使用KILL。(KILL为非正常中止,会在文件系统里留下残余数据)

 

捕捉进程信号

trap可引起Shell注册信号处理器抓取制定的信号。

trap  字符串参数(捕捉时要被执行的命令列表)   捕捉的信号列表

一个脚本:休眠循环脚本

#!/bin/sh -

trap 'echo Ignoring HUP ...' HUP
trap 'echo Terminating on USR1 ...;exit 1' USR1

while true
do
  sleep 2
  date >/dev/null
done

 

$ ./looper &                          后台执行looper

[1] 11985

$ kill -HUP 11985                HUP信号

Ignoring HUP ...

$ kill -USR1 11985              USR1信号

Terminating on USR1 ...

[1]    Exit 1                        ./looper

trap  '...'  EXIT                     exit()被系统调用前,作清理操作(如删除暂时性文件)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值