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:真實用戶
- -f:顯示進程全部信息
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等信息
- cat /proc/cpuinfo:查看cpu,邏輯與物理cpu見:https://www.cnblogs.com/yinfutao/p/9906923.html
- cat /proc/meminfo:查看內存
- cat /proc/partition:查看分片
#查看物理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