一塊兒學shell之(九-2)拼寫檢查、進程

 #----------------------------------------------------------#html

# ====> 紅色字體 -特指煮酒我的所見。加粗則爲須要重點注意。 #linux

# ====>  藍色加粗 -特指與本文相關人員,包括參與修正的朋友。 #
# ====> 煮酒品茶 -Http://cwtea.blog.51cto.com          #
#----------------------------------------------------------#

第一部分: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  socket

刪除進程: ide

必需要知道四個信號:ABRT(中斷)HUP(擱置)、KILLTERM(終結) 函數

ABRT有點相似TERM,不過它會抵制清除的操做,併產生進程內存影像的副本,將其置於核心,即program,corecore.PID中。 oop

HUP信號有點相似要求停止,可是對於不少daemon來講,它時常表示進程應先中止手頭工做,而後準備處理新的工做,好像它從新被啓動同樣。Nginx靜默重啓嘛?

KILLSTOP,這兩個信號必定會當即被傳送,然而對於休眠進程而言、這根據shell實例與操做系統而定,大部分的其餘信號都只在進程醒着(wake up)的時候才傳送。

傳遞信號事實上是會有延遲的。

查看HUPTREM工做


  
  
           
  
  
  1. [root@cwtea ~]# ps -ef|grep httpd 
  2. root      2577     1  0 03:59 ?        00:00:00 /usr/sbin/httpd 
  3. apache    2579  2577  0 03:59 ?        00:00:00 /usr/sbin/httpd 
  4. apache    2580  2577  0 03:59 ?        00:00:00 /usr/sbin/httpd 
  5. apache    2581  2577  0 03:59 ?        00:00:00 /usr/sbin/httpd 
  6. apache    2582  2577  0 03:59 ?        00:00:00 /usr/sbin/httpd 
  7. apache    2583  2577  0 03:59 ?        00:00:00 /usr/sbin/httpd 
  8. apache    2584  2577  0 03:59 ?        00:00:00 /usr/sbin/httpd 
  9. apache    2585  2577  0 03:59 ?        00:00:00 /usr/sbin/httpd 
  10. apache    2586  2577  0 03:59 ?        00:00:00 /usr/sbin/httpd 
  11. root      2590  2495  0 03:59 pts/0    00:00:00 grep httpd 
  12. [root@cwtea ~]# kill -HUP 2577 
  13. [root@cwtea ~]# ps -ef|grep httpd  #並無殺死,而是擱置 
  14. root      2577     1  0 03:59 ?        00:00:00 /usr/sbin/httpd 
  15. apache    2591  2577  0 03:59 ?        00:00:00 /usr/sbin/httpd 
  16. apache    2592  2577  0 03:59 ?        00:00:00 /usr/sbin/httpd 
  17. apache    2593  2577  0 03:59 ?        00:00:00 /usr/sbin/httpd 
  18. apache    2594  2577  0 03:59 ?        00:00:00 /usr/sbin/httpd 
  19. apache    2595  2577  0 03:59 ?        00:00:00 /usr/sbin/httpd 
  20. apache    2596  2577  0 03:59 ?        00:00:00 /usr/sbin/httpd 
  21. apache    2597  2577  0 03:59 ?        00:00:00 /usr/sbin/httpd 
  22. apache    2598  2577  0 03:59 ?        00:00:00 /usr/sbin/httpd 
  23. root      2600  2495  0 03:59 pts/0    00:00:00 grep httpd 
  24. [root@cwtea ~]# kill -TERM 2577  #殺死了 
  25. [root@cwtea ~]# ps -ef|grep httpd 
  26. root      2602  2495  0 04:00 pts/0    00:00:00 grep httpd 
  27. 進程追蹤:pgrep pkill 
  28. [root@cwtea ~]# ps -ef |grep httpd 
  29. root      5352     1  1 04:03 ?        00:00:00 /usr/sbin/httpd 
  30. apache    5355  5352  0 04:03 ?        00:00:00 /usr/sbin/httpd 
  31. apache    5356  5352  0 04:03 ?        00:00:00 /usr/sbin/httpd 
  32. apache    5357  5352  0 04:03 ?        00:00:00 /usr/sbin/httpd 
  33. apache    5358  5352  0 04:03 ?        00:00:00 /usr/sbin/httpd 
  34. apache    5359  5352  0 04:03 ?        00:00:00 /usr/sbin/httpd 
  35. apache    5360  5352  0 04:03 ?        00:00:00 /usr/sbin/httpd 
  36. apache    5361  5352  0 04:03 ?        00:00:00 /usr/sbin/httpd 
  37. apache    5362  5352  0 04:03 ?        00:00:00 /usr/sbin/httpd 
  38. root      5499  2495  0 04:03 pts/0    00:00:00 grep httpd 
  39. [root@cwtea ~]# pgrep httpd 
  40. 5352 
  41. 5355 
  42. 5356 
  43. 5357 
  44. 5358 
  45. 5359 
  46. 5360 
  47. 5361 
  48. 5362 

休眠循環腳本:looper


  
  
           
  
  
  1. [root@cwtea 10]# cat looper  
  2. trap 'echo Ignoring HUP ...' HUP     #回報HUP信號已被接收到。 
  3. trap 'echo Terminating on USR1 ... ; exit 1' USR1    #回報USR1信號並離開。 
  4. #進入休眠操做的無窮循環。 
  5. while true 
  6. do 
  7. sleep 2 
  8. date >/dev/null 
  9. [root@cwtea 10]# ./looper &  #後臺執行looper 
  10. [3] 5646     #進程ID爲5646 
  11. [root@cwtea 10]# kill -HUP 5646  #傳送HUP信號給looper 
  12. [root@cwtea 10]# Ignoring HUP ... 
  13. [root@cwtea 10]# ./looper &  #再次後臺執行looper 
  14. [4] 5704 
  15. [root@cwtea 10]# kill -HUP 5704  #傳送HUP信號給looper 
  16. [root@cwtea 10]# Ignoring HUP ... 
  17. [root@cwtea 10]# ./looper & 
  18. [5] 5970 
  19. [root@cwtea 10]# kill -HUP 5970 
  20. [root@cwtea 10]# Ignoring HUP ... 
  21. [root@cwtea 10]# kill -USR1 5970     #傳送USR1信號給looper 
  22. [root@cwtea 10]# Terminating on USR1 ... 
  23. [5]+  Exit 1                  ./looper 
  24. [root@cwtea 10]# ./looper & 
  25. [5] 6208 
  26. [root@cwtea 10]# kill -CHLD 6208 
  27. [root@cwtea 10]# jobs 
  28. [1]   Running                 ./looper & 
  29. [2]   Running                 ./looper & 
  30. [3]   Running                 ./looper & 
  31. [4]-  Running                 ./looper & 
  32. [5]+  Running                 ./looper & 
  33. [root@cwtea 10]# kill -FPE 24286 
  34. -bash: kill: (24286) - 沒有那個進程 
  35. [root@cwtea 10]# kill -FE 6208 
  36. -bash: kill: FE: invalid signal specification 
  37. [root@cwtea 10]# kill -FPE 6208 
  38. [root@cwtea 10]# ./looper & 
  39. [6] 6524 
  40. [5]   浮點數例外         ./looper 
  41. [root@cwtea 10]# kill -PIPE 6524 
  42. [root@cwtea 10]# ./looper & 
  43. [7] 6662 
  44. [6]   斷開的管道         ./looper 
  45. [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目錄內實例一個標準的文件系統界面,每一個執行中的進程都會在那裏擁有一個子目錄,以進程編號命名,且在每一個子目錄裏面是各式各樣小文件的內核數據。


  
  
           
  
  
  1. [root@cwtea proc]# pgrep httpd 
  2. 5352 
  3. 5355 
  4. ............ 
  5. [root@cwtea proc]# ls /proc/5352 
  6. attr             cpuset   fd        maps        numa_maps  schedstat  status 
  7. auxv             cwd      io        mem         oom_adj    smaps      task 
  8. cmdline          environ  limits    mounts      oom_score  stat       wchan 
  9. coredump_filter  exe      loginuid  mountstats  root       statm 
  10. [root@cwtea proc]# ls /proc/5352 -l      #以冗餘式列表,列出proc文件。 
  11. 總計 0 
  12. dr-xr-xr-x 2 root root 0 05-26 04:36 attr 
  13. -r-------- 1 root root 0 05-26 04:36 auxv 
  14. -r--r--r-- 1 root root 0 05-26 04:03 cmdline 
  15. -rw-r--r-- 1 root root 0 05-26 04:36 coredump_filter 
  16. ........ 
  17. [root@cwtea proc]# cat -v /proc/5352/cmdline 
  18. /usr/sbin/httpd^@[root@cwtea proc]# 

<>

相關文章
相關標籤/搜索