Linux之進程管理(2)相關命令之三html
(IPC)進程間通訊及信號控制命令 kill killall web
kill 命令正則表達式
kill - terminate a process,Inter Process Communicationapache
進程通訊工具,默認爲發送終止信號vim
選項及用法:centos
kill -l #顯示全部信號CODE及名稱bash
kill [-SIGNAL] pid...#指定發送信號給對應pid的進程,不指定信號代碼默認爲15信號服務器
常見的信號:(注:可使用man 7 signal打開幫助搜索 Standard Signals關鍵字)ide
1) SIGHUP: 無須關閉進程而讓其重讀配置文件工具
2) SIGINT: 停止正在運行的進程;至關於Ctrl+c
9) SIGKILL: 殺死正在運行的進程
15) SIGTERM:終止正在運行的進程(默認信號)
18) SIGCONT:繼續運行
19) SIGSTOP:後臺休眠
使用方法,指定一個信號,如:
信號號碼:kill -1 932
信號名稱:kill -SIGHUP 932
信號名稱簡寫:kill -HUP 932
使用案例:
一、殺死真正打開的vim進程
#查看當前打開vim的pid
[root@localhost ~]# ps -C vim -o pid= | tr -cd '[0-9]\n' 3042
#對當前vim進程發送15信號
[root@localhost ~]# kill -TERM 3042
#終端另外一方已經被退出了vim
Vim: Caught deadly signal TERM0,0-1 All Vim: Finished. Terminated
二、不重啓服務下重讀httpd服務配置
#查看當前httpd服務器狀態,未啓動
[root@localhost ~]# systemctl status httpd ● httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled) Active: inactive (dead) Docs: man:httpd(8) man:apachectl(8)
解析:這裏使用centos7,dead表示未啓動,centos6版本使用命令行servic httpd status,顯示running表示啓動,顯示stopped...表示未啓動。
#啓動httpd服務器
[root@localhost ~]# systemctl start httpd
#查看80端口是否已經開啓,grep能匹配80端口出來表示服務以及啓動
[root@localhost ~]# ss -tan | grep ':80\>' LISTEN 0 128 :::80 :::*
#查看當前默認首頁配置(在httpd主配置文件中搜索DocumentRoot)
[root@localhost ~]# grep '^[[:space:]]*DocumentRoot' /etc/httpd/conf/httpd.conf DocumentRoot "/var/www/html"
#查看對應的服務器根訪問點是否有網頁
[root@localhost ~]# ls /var/www/html/ index.html
解析:默認說明是對的,那麼此時經過其它工具訪問是能夠顯示html中的首頁的。也就是index.html頁面。
#下面經過另一個主機訪問,直接經過http協議下載工具下載服務器的index.html頁面
[root@mzf ~]# wget http://10.1.249.223/index.html --2016-08-17 19:33:15-- http://10.1.249.223/index.html Connecting to 10.1.249.223:80... connected. HTTP request sent, awaiting response... 200 OK Length: 109 [text/html] Saving to: 「index.html.1」 100%[============================================================================================================>] 109 --.-K/s in 0s 2016-08-17 19:33:15 (1.09 MB/s) - 「index.html.1」 saved [109/109]
解析:出現下面連接完成的進度條表示已經能夠訪問,下面查看是否下載到了web頁面。
#查看當前目錄是否存在剛剛下載的index.html
[root@mzf ~]# ls -l ./index.html -rw-r--r--. 1 root root 100 Sep 7 2016 ./index.html
#查看文件內容
[root@mzf ~]# cat index.html <html> <head> <title>Hello world</title> </head/> <body> <h1>This is a http.</h1> </body> </html>
解析:如今服務端的 httpd服務正常運行,並且配置讀取成功,下面咱們修改httpd主配置文件中指定的DocumentRooot目錄。這裏咱們記住當前index.html的title爲Hello world。
#修改httpd.conf文件,改變DocumentRoot指定的目錄
說明:此時Httpd服務首頁更目錄已經改爲了/var/ww/myhtml目錄,下面進行配置文件重讀。
#查看/var/www/myhtml有什麼文件
[root@localhost ~]# ls /var/www/myhtml/ index.html
#查看myhtml目錄下的index文件內容
[root@localhost ~]# cat /var/www/myhtml/index.html <html> <head> <title>server.mzf.com<title> </head> <body> <h1>This is /var/www/myhtml dir</h1> </body> </html>
說明:這裏注意到這個文件的title爲server.mzf.com,下面重讀配置文件。
#先查看此時httpd的主進程pid
[root@localhost ~]# pgrep '^httpd\>' | sort -n | head -n 1 3069
#發送SIGHUP(1)信號來通知httpd服務進程重讀配置
[root@localhost ~]# kill -SIGHUP 3069
#再次使用另一臺主機去經過httpd協議軟件下載此時myhtml中的index.html文件
[root@mzf ~]# wget http://10.1.249.223/index.html --2016-08-17 19:47:41-- http://10.1.249.223/index.html Connecting to 10.1.249.223:80... connected. HTTP request sent, awaiting response... 200 OK Length: 111 [text/html] Saving to: 「index.html.2」 100%[============================================================================================================>] 111 --.-K/s in 0s 2016-08-17 19:47:41 (1.06 MB/s) - 「index.html.2」 saved [111/111] --2016-08-17 19:47:41-- http://./index2.html Resolving .... failed: Temporary failure in name resolution. wget: unable to resolve host address 「.」 FINISHED --2016-08-17 19:47:41-- Downloaded: 1 files, 111 in 0s (1.06 MB/s)
解析:這裏顯示下載成功,並且由於檢查目錄有同名文件,全部會自動存到當前目錄中的文件名稱爲index.html.2,注意藍色字那一行。
#因而查看index2.html信息title標籤是否爲server.mzf.com
[root@mzf ~]# cat index.html.2 <html> <head> <title>server.mzf.com<title> </head> <body> <h1>This is /var/www/myhtml dir</h1> </body> </html>
解析:這裏就說了httpd服務以及成功接收了SIGHUP信號。
總結:這裏除了能夠去強制殺死進程(發送SIGKILL信號),那麼之後對某些支持SIGHUP信號的服務類進程進行修改配置,讓其生效也不須要再重啓整個服務了,只須要發送SIGHUP信號來讓服務進程組進行重讀進程參數。
killaill 命令
killall - kill processes by name
根據指定的進程名來殺死對應全部的進程
命令格式及選項:
killall -l :列出全部信行列表
killall [options]... name ...
-r [regx] :使用擴展正則表達式來匹配進程名稱
-s, --signal [SIGNAL] :發送指定信行
-I:忽略進程名大小寫
-q, --quiet :靜默模式
-u USERNAME:只殺死指定進程全部者的進程
-i,--interactive:交互式
案例(這裏打開兩個終端pts/0用於打開測試進程,pts/1用於進行進程處理):
1、殺死vim進程
#使用vim在另外一個終端打開一個文件
[root@localhost ~]# vim file
#查看此當前終端vim的進程列表
[root@localhost ~]# ps -C vim -o pid,comm,ruser,tty PID COMMAND RUSER TT 3296 vim root pts/0
#取出進程號
[root@localhost ~]# ps -C vim -o pid= | tr -cd '[0-9]\n' 3296
#對此vim進程發送終止信行TERM
[root@localhost ~]# killall -TERM -r '^vim\>'
#再次查看剛纔打開vim的終端,已經vim進程已經終止了
Vim: Caught deadly signal TERM 0,0-1 All Vim: Finished. Terminated
注意:這裏使用擴展正則表達式只是對發起進程的命令名稱,而不是完整的命令名+參數,全部這裏只須要針對命令命令就好了。
2、殺死管道進程tar
#再次在剛纔打開vim的終端上測試,使用tar命令測試
[root@localhost ~]# tar -cvf - /* | tar -tvf -
#而後切換處處理的終端,查看剛纔終端的tar進程信息
[root@localhost ~]# pgrep -f 'tar.*-.*' -l -t pts/0 3319 tar 3320 tar
解析:爲何爲匹配出2行,由於tar -cvf - /* | tar -tvf - 這中間雖然用管道相連,可是在終端來看,實際上開啓了2個進程,及一個模擬打包,一個模擬查看列出。
#使用killall直接殺死tar的進程
[root@localhost ~]# killall -r '^tar\>' -9
三、殺死後臺進程
#切換到測試開開進程的pts/0終端,運行後臺查找命令
[root@localhost ~]# find / -type d -exec echo {} > /tmp/shfilelist.log \; & [1] 83484
#查看其做業編號
[root@localhost ~]# jobs [1]+ Running find / -type d -exec echo {} \; > /tmp/shfilelist.log &
#暫停後臺進程
[root@localhost ~]# killall -19 find [root@localhost ~]# jobs [1]+ Stopped find / -type d -exec echo {} \; > /tmp/shfilelist.log
#繼續運行
[root@localhost ~]# killall -18 find
#直接殺死
[root@localhost ~]# killall -9 -r '^\<find' [root@localhost ~]# jobs [1]+ Killed find / -type d -exec echo {} \; > /tmp/shfilelist.log