#----------------------------------------------------------#html
# ====> 紅色字體 -特指煮酒我的所見。加粗則爲須要重點注意。 #linux
第一部分:shell
一塊兒學shell之(九)拼寫檢查、進程apache
http://cwtea.blog.51cto.com/4500217/879968bash
Linux信號簡介 session
1) SIGHUP 本信號在用戶終端鏈接(正常或非正常)結束時發出, 一般是在終端的控制進程結束時, 通知同一session內的各個做業, 這時它們與控制終端再也不關聯.
2) SIGINT 程序終止(interrupt)信號, 在用戶鍵入INTR字符(一般是Ctrl-C)時發出
3) SIGQUIT 和SIGINT相似, 但由QUIT字符(一般是Ctrl-\)來控制. 進程在因收到SIGQUIT退出時會產生core文件, 在這個意義上相似於一個程序錯誤信號.
4) SIGILL 執行了非法指令. 一般是由於可執行文件自己出現錯誤, 或者試圖執行數據段. 堆棧溢出時也有可能產生這個信號.
5) SIGTRAP 由斷點指令或其它trap指令產生. 由debugger使用.
6) SIGABRT 程序本身發現錯誤並調用abort時產生.
7) SIGIOT 在PDP-11上由iot指令產生, 在其它機器上和SIGABRT同樣.
8) SIGBUS 非法地址, 包括內存地址對齊(alignment)出錯. eg: 訪問一個四個字長的整數, 但其地址不是4的倍數.
9) SIGFPE 在發生致命的算術運算錯誤時發出. 不只包括浮點運算錯誤, 還包括溢出及除數爲0等其它全部的算術的錯誤.
10) SIGKILL 用來當即結束程序的運行. 本信號不能被阻塞, 處理和忽略.
11) SIGUSR1 留給用戶使用
12) SIGSEGV 試圖訪問未分配給本身的內存, 或試圖往沒有寫權限的內存地址寫數據.
13) SIGUSR2 留給用戶使用
14) SIGPIPE Broken pipe
15) SIGALRM 時鐘定時信號, 計算的是實際的時間或時鐘時間. alarm函數使用該信號.
16) SIGTERM 程序結束(terminate)信號, 與SIGKILL不一樣的是該信號能夠被阻塞和處理. 一般用來要求程序本身正常退出. shell命令kill缺省產生這個信號.
17) SIGCHLD 子進程結束時, 父進程會收到這個信號.
18) SIGCONT 讓一箇中止(stopped)的進程繼續執行. 本信號不能被阻塞. 能夠用一個handler來讓程序在由stopped狀態變爲繼續執行時完成特定的工做. 例如, 從新顯示提示符
19) SIGSTOP 中止(stopped)進程的執行. 注意它和terminate以及interrupt的區別: 該進程還未結束, 只是暫停執行. 本信號不能被阻塞, 處理或忽略.
20) SIGTSTP 中止進程的運行, 但該信號能夠被處理和忽略. 用戶鍵入SUSP字符時(一般是Ctrl-Z)發出這個信號
21) SIGTTIN 當後臺做業要從用戶終端讀數據時, 該做業中的全部進程會收到SIGTTIN信號. 缺省時這些進程會中止執行.
22) SIGTTOU 相似於SIGTTIN, 但在寫終端(或修改終端模式)時收到.
23) SIGURG 有緊急數據或out-of-band數據到達socket時產生.
24) SIGXCPU 超過CPU時間資源限制. 這個限制能夠由getrlimit/setrlimit來讀取/改變
25) SIGXFSZ 超過文件大小資源限制.
26) SIGVTALRM 虛擬時鐘信號. 相似於SIGALRM, 可是計算的是該進程佔用的CPU時間.
27) SIGPROF 相似於SIGALRM/SIGVTALRM, 但包括該進程用的CPU時間以及系統調用的時間.
28) SIGWINCH 窗口大小改變時發出.
29) SIGIO 文件描述符準備就緒, 能夠開始進行輸入/輸出操做.
30) SIGPWR Power failure
刪除進程:
必需要知道四個信號:ABRT(中斷)、HUP(擱置)、KILL、TERM(終結)
ABRT有點相似TERM,不過它會抵制清除的操做,併產生進程內存影像的副本,將其置於核心,即program,core或core.PID中。
HUP信號有點相似要求停止,可是對於不少daemon來講,它時常表示進程應先中止手頭工做,而後準備處理新的工做,好像它從新被啓動同樣。Nginx靜默重啓嘛?
KILL與STOP,這兩個信號必定會當即被傳送,然而對於休眠進程而言、這根據shell實例與操做系統而定,大部分的其餘信號都只在進程醒着(wake up)的時候才傳送。
傳遞信號事實上是會有延遲的。
查看HUP與TREM工做
- [root@cwtea ~]# ps -ef|grep httpd
- root 2577 1 0 03:59 ? 00:00:00 /usr/sbin/httpd
- apache 2579 2577 0 03:59 ? 00:00:00 /usr/sbin/httpd
- apache 2580 2577 0 03:59 ? 00:00:00 /usr/sbin/httpd
- apache 2581 2577 0 03:59 ? 00:00:00 /usr/sbin/httpd
- apache 2582 2577 0 03:59 ? 00:00:00 /usr/sbin/httpd
- apache 2583 2577 0 03:59 ? 00:00:00 /usr/sbin/httpd
- apache 2584 2577 0 03:59 ? 00:00:00 /usr/sbin/httpd
- apache 2585 2577 0 03:59 ? 00:00:00 /usr/sbin/httpd
- apache 2586 2577 0 03:59 ? 00:00:00 /usr/sbin/httpd
- root 2590 2495 0 03:59 pts/0 00:00:00 grep httpd
- [root@cwtea ~]# kill -HUP 2577
- [root@cwtea ~]# ps -ef|grep httpd #並無殺死,而是擱置
- root 2577 1 0 03:59 ? 00:00:00 /usr/sbin/httpd
- apache 2591 2577 0 03:59 ? 00:00:00 /usr/sbin/httpd
- apache 2592 2577 0 03:59 ? 00:00:00 /usr/sbin/httpd
- apache 2593 2577 0 03:59 ? 00:00:00 /usr/sbin/httpd
- apache 2594 2577 0 03:59 ? 00:00:00 /usr/sbin/httpd
- apache 2595 2577 0 03:59 ? 00:00:00 /usr/sbin/httpd
- apache 2596 2577 0 03:59 ? 00:00:00 /usr/sbin/httpd
- apache 2597 2577 0 03:59 ? 00:00:00 /usr/sbin/httpd
- apache 2598 2577 0 03:59 ? 00:00:00 /usr/sbin/httpd
- root 2600 2495 0 03:59 pts/0 00:00:00 grep httpd
- [root@cwtea ~]# kill -TERM 2577 #殺死了
- [root@cwtea ~]# ps -ef|grep httpd
- root 2602 2495 0 04:00 pts/0 00:00:00 grep httpd
- 進程追蹤:pgrep pkill
- [root@cwtea ~]# ps -ef |grep httpd
- root 5352 1 1 04:03 ? 00:00:00 /usr/sbin/httpd
- apache 5355 5352 0 04:03 ? 00:00:00 /usr/sbin/httpd
- apache 5356 5352 0 04:03 ? 00:00:00 /usr/sbin/httpd
- apache 5357 5352 0 04:03 ? 00:00:00 /usr/sbin/httpd
- apache 5358 5352 0 04:03 ? 00:00:00 /usr/sbin/httpd
- apache 5359 5352 0 04:03 ? 00:00:00 /usr/sbin/httpd
- apache 5360 5352 0 04:03 ? 00:00:00 /usr/sbin/httpd
- apache 5361 5352 0 04:03 ? 00:00:00 /usr/sbin/httpd
- apache 5362 5352 0 04:03 ? 00:00:00 /usr/sbin/httpd
- root 5499 2495 0 04:03 pts/0 00:00:00 grep httpd
- [root@cwtea ~]# pgrep httpd
- 5352
- 5355
- 5356
- 5357
- 5358
- 5359
- 5360
- 5361
- 5362
休眠循環腳本:looper
- [root@cwtea 10]# cat looper
- trap 'echo Ignoring HUP ...' HUP #回報HUP信號已被接收到。
- trap 'echo Terminating on USR1 ... ; exit 1' USR1 #回報USR1信號並離開。
- #進入休眠操做的無窮循環。
- while true
- do
- sleep 2
- date >/dev/null
- [root@cwtea 10]# ./looper & #後臺執行looper
- [3] 5646 #進程ID爲5646
- [root@cwtea 10]# kill -HUP 5646 #傳送HUP信號給looper
- [root@cwtea 10]# Ignoring HUP ...
- [root@cwtea 10]# ./looper & #再次後臺執行looper
- [4] 5704
- [root@cwtea 10]# kill -HUP 5704 #傳送HUP信號給looper
- [root@cwtea 10]# Ignoring HUP ...
- [root@cwtea 10]# ./looper &
- [5] 5970
- [root@cwtea 10]# kill -HUP 5970
- [root@cwtea 10]# Ignoring HUP ...
- [root@cwtea 10]# kill -USR1 5970 #傳送USR1信號給looper
- [root@cwtea 10]# Terminating on USR1 ...
- [5]+ Exit 1 ./looper
- [root@cwtea 10]# ./looper &
- [5] 6208
- [root@cwtea 10]# kill -CHLD 6208
- [root@cwtea 10]# jobs
- [1] Running ./looper &
- [2] Running ./looper &
- [3] Running ./looper &
- [4]- Running ./looper &
- [5]+ Running ./looper &
- [root@cwtea 10]# kill -FPE 24286
- -bash: kill: (24286) - 沒有那個進程
- [root@cwtea 10]# kill -FE 6208
- -bash: kill: FE: invalid signal specification
- [root@cwtea 10]# kill -FPE 6208
- [root@cwtea 10]# ./looper &
- [6] 6524
- [5] 浮點數例外 ./looper
- [root@cwtea 10]# kill -PIPE 6524
- [root@cwtea 10]# ./looper &
- [7] 6662
- [6] 斷開的管道 ./looper
- [root@cwtea 10]# kill 6662
煮酒品茶:搞暈了,四種信號,傳送相關信號給程序,而後程序執行相關信號。繼續循環?回頭再好好摸索摸索。
延遲的進程度調
Sleep:延遲片刻
At:延遲到特定時間
Batch:爲資源控制而延遲
Crontab:在指定時間再執行
crontabs
crontab 是用來讓使用者在固定時間或固定間隔執行程序之用,換句話說,也就是相似使用者的時程表。-u user 是指設定指定 user 的時程表,這個前提是你必需要有其權限(好比說是 root)纔可以指定他人的時程表。若是不使用 -u user 的話,就是表示設定本身的時程表。
取自:http://www.linuxso.com/command/crontab.html
經常使用參數:
crontab -l //查看當前用戶下的cron任務
crontab -e //編輯當前用戶的定時任務
crontab -u linuxso -e //編輯用戶linuxso的定時任務
具體用法和格式:
基本格式 :
* * * * * command
分 時 日 月 周 命令
/proc文件系統
經過一個特殊文件設備,訪問內枋裏的數據,也就是在/proc目錄內實例一個標準的文件系統界面,每一個執行中的進程都會在那裏擁有一個子目錄,以進程編號命名,且在每一個子目錄裏面是各式各樣小文件的內核數據。
- [root@cwtea proc]# pgrep httpd
- 5352
- 5355
- ............
- [root@cwtea proc]# ls /proc/5352
- attr cpuset fd maps numa_maps schedstat status
- auxv cwd io mem oom_adj smaps task
- cmdline environ limits mounts oom_score stat wchan
- coredump_filter exe loginuid mountstats root statm
- [root@cwtea proc]# ls /proc/5352 -l #以冗餘式列表,列出proc文件。
- 總計 0
- dr-xr-xr-x 2 root root 0 05-26 04:36 attr
- -r-------- 1 root root 0 05-26 04:36 auxv
- -r--r--r-- 1 root root 0 05-26 04:03 cmdline
- -rw-r--r-- 1 root root 0 05-26 04:36 coredump_filter
- ........
- [root@cwtea proc]# cat -v /proc/5352/cmdline
- /usr/sbin/httpd^@[root@cwtea proc]#
<完>