linux shell脚本攻略 第九章 管理重任 调度,进程管理 ps,top,pgrep,kill,crontab用法等

1.收集进程信息(ps,top,pgrep)

  • ps常用方法
    • -f:显示进程全部信息
      列为UID PID PPID C STIME TTY TIME CMD。其中各列的内容意如下
      UID //用户ID、但输出的是用户名
      PID //进程的ID
      PPID //父进程ID
      C //进程占用CPU的百分比
      STIME //进程启动到现在的时间
      TTY //该进程在那个终端上运行,若与终端无关,则显示? 若为pts/0等,则表示由网络连接主机进程。
      CMD //命令的名称和参数
    • -e:获取运行在系统的每个进程的信息(-ax命令也可以)
    • -o:指定需要显示的列,可指定多个信息
    • -c:command name
    • -u:有效用户列表
    • -U:真实用户
Ian>ps -ef |grep online
ian        9056   8842  0 Apr09 ?        00:00:00 /usr/lib/gnome-online-accounts/goa-daemon
ian        9066   8842  0 Apr09 ?        00:00:00 /usr/lib/gnome-online-accounts/goa-identity-service
ian       58598   9338  0 20:35 pts/0    00:00:00 grep --color=auto online
  • top:输出一个占用CPU最多的线程列表
  • pgrep:获得特定命令的列表
  • which:找出某个命令的位置
  • whereis:返回路径位置且打印对应的命令手册及源码路径
  • file:打印出文件细节
  • whatis:命令解释
Ian>whatis ls
ls (1)               - list directory contents
Ian>pgrep ls
1135
1331
9013
9205
Ian>whereis ls
ls: /bin/ls /usr/share/man/man1/ls.1.gz
Ian>which ls
/bin/ls
Ian>file /bin/ls
/bin/ls: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/l, for GNU/Linux 3.2.0, BuildID[sha1]=9567f9a28e66f4d7ec4baf31cfbf68d0410f0ae6, stripped

2.杀死进程(kill,trap)

可以使用特定的信号中断进程

  • kill -s signal:向程序发送杀死信号
  • kill -l:列出所有的可用信号
    • 1:对控制进程或终端的终结进行挂起检测
    • 2:ctrl+c发送该信号
    • 9:强行杀死
    • 15:默认用于终止进程
    • 20:ctrl+z时发送该信号
Ian>kill -l
 1) SIGHUP	 2) SIGINT	 3) SIGQUIT	 4) SIGILL	 5) SIGTRAP
 6) SIGABRT	 7) SIGBUS	 8) SIGFPE	 9) SIGKILL	10) SIGUSR1
11) SIGSEGV	12) SIGUSR2	13) SIGPIPE	14) SIGALRM	15) SIGTERM
16) SIGSTKFLT	17) SIGCHLD	18) SIGCONT	19) SIGSTOP	20) SIGTSTP
21) SIGTTIN	22) SIGTTOU	23) SIGURG	24) SIGXCPU	25) SIGXFSZ
26) SIGVTALRM	27) SIGPROF	28) SIGWINCH	29) SIGIO	30) SIGPWR
31) SIGSYS	34) SIGRTMIN	35) SIGRTMIN+1	36) SIGRTMIN+2	37) SIGRTMIN+3
38) SIGRTMIN+4	39) SIGRTMIN+5	40) SIGRTMIN+6	41) SIGRTMIN+7	42) SIGRTMIN+8
43) SIGRTMIN+9	44) SIGRTMIN+10	45) SIGRTMIN+11	46) SIGRTMIN+12	47) SIGRTMIN+13
48) SIGRTMIN+14	49) SIGRTMIN+15	50) SIGRTMAX-14	51) SIGRTMAX-13	52) SIGRTMAX-12
53) SIGRTMAX-11	54) SIGRTMAX-10	55) SIGRTMAX-9	56) SIGRTMAX-8	57) SIGRTMAX-7
58) SIGRTMAX-6	59) SIGRTMAX-5	60) SIGRTMAX-4	61) SIGRTMAX-3	62) SIGRTMAX-2
63) SIGRTMAX-1	64) SIGRTMAX	

  • killall process_name:根据进程名杀死进程
    • killall -u username process_name:根据用户名和进程名杀死进程
  • trap为信号分配执行程序,trap “function name” SIGNAL
    • 当脚本收到该信号,执行某个程序 。举例:
Ian>vim sig.sh
#!/bin/bash
function handler()
{
        echo HEY,SIGNAL: SIGINT
}
echo process id is $$
trap "handler" SIGINT
while true;
do
        sleep 1
done

Ian>bash sig.sh 
process id is 58859

^CHEY,SIGNAL: SIGINT

3.向用户终端发送消息

  • uname

    -n:打印主机名
    -r:内核发行版本
    -m:主机类型

    Ian>uname -n
    ian-virtual-machine
    Ian>uname -r
    5.3.0-46-generic
    Ian>uname -m
    x86_64
    
  • proc查看cpu等信息

#查看物理cpu
Ian>cat /proc/cpuinfo |grep "physical id"|sort|uniq |wc -l
1
#查看逻辑cpu
Ian>cat /proc/cpuinfo |grep "processor"|wc -l
2
#查看cpu核数
Ian>cat /proc/cpuinfo |grep "cores"|uniq
cpu cores	: 2
#查看可用内存数
Ian>cat /proc/meminfo | head -n 1
MemTotal:        2006008 kB
#查看系统的分区信息
Ian>cat /proc/partitions 
major minor  #blocks  name

   7        0     144040 loop0
   7        4      15100 loop4
   7        5     160440 loop5
   7        6     163996 loop6
   7        7      15104 loop7
  11        0    1048575 sr0
   8        0   20971520 sda
   8        1   20969472 sda1

4.使用proc采集进程信息

使用方法:
cat /proc/PID/environ:与进程有关的环境变量
cat /proc/PID/cwd:一个到进程工作目录的符号链接
cat /proc/PID/exe:到当前进程所对应的可执行文件的符号链接
可以使用readlink 查看原始文件位置

Ian>cat /proc/8991/environ 
USER=ianLC_TIME=en_US.UTF-8TEXTDOMAIN=im-configXDG_SEAT=seat0XDG_SESSION_TYPE=x11SSH_AGENT_PID=8964SHLVL=0QT4_IM_MODULE=ximHOME=/home/ianDESKTOP_SESSION=ubuntuGTK_MODULES=gail:atk-bridgeGNOME_SHELL_SESSION_MODE=ubuntuLC_MONETARY=en_US.UTF-8DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/busIM_CONFIG_PHASE=2LOGNAME=ianGTK_IM_MODULE=ibusUSERNAME=ianXDG_SESSION_ID=41WINDOWPATH=2PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/binPAPERSIZE=letterLC_ADDRESS=en_US.UTF-8XDG_RUNTIME_DIR=/run/user/1000DISPLAY=:0LANG=en_US.UTF-8XDG_CURRENT_DESKTOP=ubuntu:GNOMELC_TELEPHONE=en_US.UTF-8XDG_SESSION_DESKTOP=ubuntuXMODIFIERS=@im=ibusXAUTHORITY=/run/user/1000/gdm/XauthoritySSH_AUTH_SOCK=/run/user/1000/keyring/sshLC_NAME=en_US.UTF-8SHELL=/bin/bashQT_ACCESSIBILITY=1GDMSESSION=ubuntuLC_MEASUREMENT=en_US.UTF-8TEXTDOMAINDIR=/usr/share/locale/GPG_AGENT_INFO=/run/user/1000/gnupg/S.gpg-agent:0:1LC_IDENTIFICATION=en_US.UTF-8XDG_VTNR=2QT_IM_MODULE=ximPWD=/home/ianCLUTTER_IM_MODULE=ximXDG_DATA_DIRS=/usr/share/ubuntu:/usr/local/share:/usr/share:/var/lib/snapd/desktopXDG_CONFIG_DIRS=/etc/xdg/xdg-ubuntu:/etc/xdgLC_NUMERIC=en_US.UTF-8LC_PAPER=en_US.UTF-8GNOME_DESKTOP_SESSION_ID=this-is-deprecatedXDG_MENU_PREFIX=gnome-SESSION_MANAGER=local/ian-virtual-machine:@/tmp/.ICE-unix/8869,unix/ian-virtual-machine:/tmp/.ICE-unix/8869DESKTOP_AUTOSTART_ID=109cb9ffee829ece9c158643812845695600000088690000GIO_LAUNCHED_DESKTOP_FILE=/usr/share/applications/org.gnome.Shell.desktopGIO_LAUNCHED_DESKTOP_FILE_PID=8991
Ian>readlink /proc/8991/cwd
/home/ian
Ian>readlink /proc/8991/exe
/usr/bin/gnome-shell

5.使用crontab进行调度

  • 用法:

    02 * * * * * * bash do.sh :每小时的第二分钟执行

  • 6部分含义:

    • 分钟(0-59)
    • 小时(0-23)
    • 天(1-31)
    • 月份(1-12)
    • 工作日(0-6)
  • 参数具体含义

    • *:每个时间段
    • /2:每2分钟/小时执行一次
    • 5,10:在5分钟和10分钟运行
    • 5-10:在5-10分钟之间运行
    • 5-20/5:5到20分钟每5分钟执行一次
  • 在脚本中创建crontab:

    • 从文件中创建: crontab task.cron
    • 从命令行创建:
    crontab <<EOF
    **02 * * * * * *  bash do.sh** 
    EOF
    
  • 在启动时执行命令

    在crontab 加入一行:@reboot command

  • 删除crontab:crobtab -r

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章