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