进程与程序
1.子程序与父程序
PID是进程的ID,PPID是其父进程的ID
登录bash之后,就是获取了一个名为bash的PID,在这个环境上所执行的其他命令,就是其子程序
common@common-Aspire-4750:~$ ps -l F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 0 S 1000 5190 5182 0 80 0 - 2153 wait pts/1 00:00:00 bash 0 R 1000 5203 5190 0 80 0 - 1606 - pts/1 00:00:00 ps
查看端口使用情况,使用netstat命令。查看已经连接的服务端口(ESTABLISHEDnetstat -a查看所有的服务端口(LISTEN,ESTABLISHED)
netstat -ap
查看8080端口,则可以结合grep命令:
netstat -ap | grep 8080
如查看8888端口,则在终端中输入:
lsof -i:8888
若要停止使用这个端口的程序,使用kill +对应的pid即可
2.作业管理:&、Ctrl-z、jobs、fg、bg、kill
& 可以直接将命令放到后台执行
输入命令后,在该命令的最后加上一个&,表示将该命令放到后台,此时会返回一个“作业号”[1],还有一个PID。
common@common-Aspire-4750:~/下载$ tar -cvzf temp.tar.gz temp/ & [1] 5225 common@common-Aspire-4750:~/下载$ temp/ temp/b.txt temp/a_copy.txt temp/a.txt temp/a.tar.gz temp/b (复件).txt 回车 [1]+ 已完成 tar -cvzf temp.tar.gz temp/
在后台中执行的命令,如果有stdout和stderr的时候,它的数据依然是输出到屏幕上的,所以要使用数据流重导向,将输出传至某个文件中
tar -cvzf temp.tar.gz temp/ >> a.txt &
Ctrl-z 可以将“当前”作业放到后台“暂停”
common@common-Aspire-4750:~/下载$ vi a.txt 请按 ENTER 或其它命令继续[1] 已完成 tar -cvzf temp.tar.gz temp/ >> a.txt 按ctrl+z #暂停 [2]+ 已停止 vi a.txt common@common-Aspire-4750:~/下载$
jobs 观察当前后台作业状态
-l:除了列出作业号之外,同时列出PID
-r:仅列出正在后台运行(run)的作业
-s:仅列出正在后台暂停(stop)的作业
common@common-Aspire-4750:~/下载$ jobs -l [2]+ 5310 停止 vi a.txt #+-符号,+表示默认的作业,在仅输入fg的时候,+的作业会被拿到前台处理
fg 将后台作业拿到前台处理
common@common-Aspire-4750:~/下载$ fg %2 # %后面跟的是作业号,默认取出+的作业 vi a.txt
bg 让作业在后台运行
common@common-Aspire-4750:~/下载$ bg %2 [2]+ vi a.txt & #多了一个&符号
kill 管理后台作业
-l:列出当前kill能够使用的信号(signal),signal表示指示,使用man 7 signal可以知道
-1:重新读取一次参数的设置文件,(类似reload)
-2:表示与由键盘输入ctrl-c同样的动作
-9:立刻强制删除一个作业
-15:以正常的程序方式终止一项作业
common@common-Aspire-4750:~/下载$ kill -9 %2 [2]+ 已停止 vi a.txt common@common-Aspire-4750:~/下载$ jobs [2]+ 已杀死 vi a.txt
killall -9 httpd #强制终止所有以httpd启动的进程
xkill
杀死一个窗口程序,在QQ后台无法呼出的时候使用
进程管理
1.进程的观察,ps命令,参数很多,参考man ps
参数:-A:所有的进程均显示出来,与-e具有同样的作用
-a:与终端无关的所有进程
-u:有效用户的相关进程
x:通常与a参数一起使用,可列出较完整的信息
输出格式:-l:较长、较详细地显示该PID的信息
j:作业的格式,带有PID、PPID等信息
-f:更为完整的输出,进程树格式显示
ps -l #将当前属于自己这次登录的PID与相关信息显示出来,以长格式显示
ps aux #列出当前所有正在内存中的进程
ps -lA #显示出所有的进程,以长格式显示
ps -axjf #以进程树的方式显示进程
common@common-Aspire-4750:~/下载$ ps -aux | grep 'lantern' #找出和lantern这个服务有关的PID号码,下面是ps命令本身 common 6929 0.0 0.0 6136 2048 pts/1 S+ 13:42 0:00 grep --color=auto lantern
如果某个进程的CMD后面还有<defunct>,就表示该进程是僵尸进程
造成僵尸进程的原因是,该进程应该已执行完毕,或者是因故应该终止了,但是该进程的父进程却无法完整地结束该进程,而造成那个进程一直存在于内存中。
2.top进程可以持续检测整个系统的进程工作状态
top [-d] [-bnp]
参数:-d,间隔多少秒输出
-b,将批处理的结果输出到文件
-n,与-b搭配,需要进行几次top的输出结果
-p,指定某些个PID来进行观察
top -d 2 #每隔两秒输出
top -b -d 2 > a.txt #以批处理的方式输出到文件,每隔两秒,必须加上-b不然会乱码
top -d 2 -p6559 #6559是已经存在的PID,每隔两秒查询一次
top主要分为两个画面,上面的画面为整个系统的资源使用状态,有6行:
第一行:显示系统时间,上线人数,整体负载(分别表示1、5、10分钟的平均负载,一般不会超过1)
第二行:显示当前观察的进程数量,注意最后的僵尸进程数量
第三行:显示CPU的总负载,id的数值接近于100,表示系统资源使用的很少
第四、五行:表示当前物理内存与虚拟内存(Men和Swap)的使用情况
第六行:输入命令显示状态的地方
3.pstree查看进程的关联性
参数:-A:各进程树之间以ASCII字符来连接
-p:同时列出每个进程PID
-u:同时列出每个进程的所属账号名称
pstree -Aup #列出当前系统上所有进程树的关联性,并显示PID和用户
防火墙
1.查询防火墙状态
sudo service ufw status sudo ufw status
2.关闭防火墙
sudo service ufw stop
3.开启防火墙,运行以上两条命令后,开启了防火墙,并在系统启动时自动开启。关闭所有外部对本机的访问,但本机访问外部正常。
sudo ufw enable sudo ufw default deny
4.开启和关闭
#开启和禁用 sudo ufw allow|deny [service] #打开或关闭某个端口,例如: sudo ufw allow smtp #允许所有的外部IP访问本机的25/tcp (smtp)端口 sudo ufw allow 22/tcp #允许所有的外部IP访问本机的22/tcp (ssh)端口 sudo ufw allow 53 #允许外部访问53端口(tcp/udp) sudo ufw allow from 192.168.1.100 #允许此IP访问所有的本机端口 sudo ufw allow proto udp 192.168.0.1 port 53 to 192.168.0.2 port 53 sudo ufw deny smtp #禁止外部访问smtp服务 sudo ufw delete allow smtp #删除上面建立的某条规则 #允许某特定 IP sudo ufw allow from xxx.xxx.xx.xxx #删除 smtp 端口的许可 sudo ufw delete allow smtp
centos清理僵尸进程
ps -A -o stat,ppid,pid,cmd | grep -e '^[Zz]' kill -9 XXX
清理buffer/caches
echo 3 > /proc/sys/vm/drop_caches
定制登录motd图案
http://www.kammerl.de/ascii/AsciiSignature.php
在/etc/profile中添加
#Login Info sh /home/lintong/motd/login_bash_ok.sh
login_bash_ok.sh内容
# * Variables user=$USER path=$PWD home=$HOME # * Check if we're somewhere in /home if [ ! -d ${home} ];then return 0 fi # * ASCII head cat /home/lintong/motd/login_logo.txt # * Print Output echo " ::::::::::::::::::::::::::::::::::-STATUS-::::::::::::::::::::::::::::::::::" reset_terminal=$(tput sgr0) total_mem=$(top -n 1 -b | grep "KiB Mem" | awk '{ print $4/1024 " Mb"}') echo -e 'E[32m'" Total Memmory :" $reset_terminal ${total_mem} total_mem_free=$(top -n 1 -b | grep "KiB Mem" | awk '{ print $6/1024 " Mb"}') echo -e 'E[32m'" Total Memmory Free :" $reset_terminal ${total_mem_free} buff_cache_used=$(top -n 1 -b | grep "KiB Mem" | awk '{ print $10/1024 " Mb"}') echo -e 'E[32m'" Buff Cache Used :" $reset_terminal ${buff_cache_used}
查看机器物理CPU个数
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
查看单个物理CPU中core的个数(即核数)
cat /proc/cpuinfo| grep "cpu cores"| uniq
查看逻辑CPU的个数
cat /proc/cpuinfo| grep "processor"| wc -l