?#----------------------------------------------------------#
# ====>?紅色字體 -特指煮酒個人所見。加粗則為需要重點注意。?#
# ====>?
藍色加粗 -特指與本文相關人員,包括參與修正的朋友。?# # ====> 煮酒品茶 -Http://cwtea.blog.51cto.com ? ? ?
?? # #----------------------------------------------------------#
第一部分:
一起學shell之(九)拼寫檢查、進程
http://cwtea.blog.51cto.com/4500217/879968
Linux信號簡介?
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]#?
<完>
本文轉自 煮酒品茶 51CTO博客,原文鏈接:http://blog.51cto.com/cwtea/879971,如需轉載請自行聯系原作者
總結
以上是生活随笔為你收集整理的一起学shell之(九-2)拼写检查、进程的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。