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

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