Linux:Killing Processes in batch。
关于批量删除Linux系统的进程,实现的方式很多。
究其根本,是执行“kill -9”的指令时以不同的方式提供Process ID。
1.获取进程ID。
获取的方式通过“ps -ef | grep xxx”,并结合诸如:awk或者cut等文本截取工具可以获得。
2.批量提供进程ID。
涉及到批量的操作,在编码过程中大多数是通过循环完成的。
在Bash中,有三种循环结构:for、while、until。
在“批量删除进程”的场景中,由于循环边界是有限量的,并且是对全部条目遍历。所以,适合这种情况的循环结构为:for与while。
基于以上分析,以下,列出几个可执行的“批量删除进程”的脚本版本:
版本一、基于:awk
效果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 |
[root@rhel5u10 script]# pwd /script [root@rhel5u10 script]# [root@rhel5u10 script]# ll total 20 -rw-r--r-- 1 root root 2088 Oct 6 20:02 linux_do_process_job.sh -rw-r--r-- 1 root root 11017 Oct 5 20:32 linux_me.sh [root@rhel5u10 script]# [root@rhel5u10 script]# sh linux_do_process_job.sh ========================== Script Killing Processes. Start: Mon Oct 6 20:04:55 PDT 2014 (Question) Please Enter Searching String: (Answer): ora_ ------ ------ ------ ### Process Searching String: ora_ ### How many Processes found by the SEARCHING STRING, Count is: 20 ------- Searching Result ------- ### Begin Search. ######################## ora10g 20753 1 0 20:03 ? 00:00:00 ora_pmon_orcl10g ora10g 20755 1 0 20:03 ? 00:00:00 ora_psp0_orcl10g ora10g 20757 1 0 20:03 ? 00:00:00 ora_mman_orcl10g ora10g 20759 1 0 20:03 ? 00:00:00 ora_dbw0_orcl10g ora10g 20761 1 0 20:03 ? 00:00:00 ora_lgwr_orcl10g ora10g 20763 1 0 20:03 ? 00:00:00 ora_ckpt_orcl10g ora10g 20765 1 0 20:03 ? 00:00:00 ora_smon_orcl10g ora10g 20767 1 0 20:03 ? 00:00:00 ora_reco_orcl10g ora10g 20769 1 0 20:03 ? 00:00:00 ora_cjq0_orcl10g ora10g 20771 1 0 20:03 ? 00:00:00 ora_mmon_orcl10g ora10g 20773 1 0 20:03 ? 00:00:00 ora_mmnl_orcl10g ora10g 20775 1 0 20:03 ? 00:00:00 ora_d000_orcl10g ora10g 20777 1 0 20:03 ? 00:00:00 ora_s000_orcl10g ora10g 20781 1 0 20:03 ? 00:00:00 ora_arc0_orcl10g ora10g 20783 1 0 20:03 ? 00:00:00 ora_arc1_orcl10g ora10g 20785 1 0 20:03 ? 00:00:00 ora_arc2_orcl10g ora10g 20790 1 0 20:03 ? 00:00:00 ora_qmnc_orcl10g ora10g 20817 1 0 20:03 ? 00:00:00 ora_j000_orcl10g ora10g 20829 1 0 20:03 ? 00:00:00 ora_q001_orcl10g ora10g 20831 1 0 20:03 ? 00:00:00 ora_q002_orcl10g ######################## ### End Search. (NOTICE): Make sure upon processes is you real want to KILLED. [Yes or No] (Answer): Hello_Kitty Your answer is: Hello_Kitty. The request is not SUPPORT. ========================== Finished. End: Mon Oct 6 20:05:03 PDT 2014 [root@rhel5u10 script]# [root@rhel5u10 script]# sh linux_do_process_job.sh ========================== Script Killing Processes. Start: Mon Oct 6 20:05:07 PDT 2014 (Question) Please Enter Searching String: (Answer): ora10g ------ ------ ------ ### Process Searching String: ora10g ### How many Processes found by the SEARCHING STRING, Count is: 31 ------- Searching Result ------- ### Begin Search. ######################## ora10g 1281 1 0 13:46 ? 00:00:00 /u01/app/oracle/product/10/dbhome_1/perl/bin/perl /u01/app/oracle/product/10/dbhome_1/bin/emwd.pl dbconsole /u01/app/oracle/product/10/dbhome_1/rhel5u10_orcl10g/sysman/log/emdb.nohup ora10g 4776 1281 0 13:47 ? 00:00:04 /u01/app/oracle/product/10/dbhome_1/bin/emagent ora10g 4940 1 0 13:47 ? 00:00:04 /u01/app/oracle/product/10/dbhome_1/jdk/bin/java -Djava.awt.headless=true -Doracle.oc4j.localhome=/u01/app/oracle/product/10/dbhome_1/sqlplus -Djava.security.properties=/u01/app/oracle/product/10/dbhome_1/oc4j/j2ee/home/config/jazn.security.props -jar /u01/app/oracle/product/10/dbhome_1/oc4j/j2ee/home/oc4j.jar -config /u01/app/oracle/product/10/dbhome_1/oc4j/j2ee/isqlplus/config/server.xml ora10g 20646 1281 3 20:01 ? 00:00:06 /u01/app/oracle/product/10/dbhome_1/jdk/bin/java -server -Xmx256M -XX:MaxPermSize=96m -XX:MinHeapFreeRatio=20 -XX:MaxHeapFreeRatio=40 -DORACLE_HOME=/u01/app/oracle/product/10/dbhome_1 -Doracle.home=/u01/app/oracle/product/10/dbhome_1/oc4j -Doracle.oc4j.localhome=/u01/app/oracle/product/10/dbhome_1/rhel5u10_orcl10g/sysman -DEMSTATE=/u01/app/oracle/product/10/dbhome_1/rhel5u10_orcl10g -Doracle.j2ee.dont.use.memory.archive=true -Djava.protocol.handler.pkgs=HTTPClient -Doracle.security.jazn.config=/u01/app/oracle/product/10/dbhome_1/oc4j/j2ee/OC4J_DBConsole_rhel5u10_orcl10g/config/jazn.xml -Djava.security.policy=/u01/app/oracle/product/10/dbhome_1/oc4j/j2ee/OC4J_DBConsole_rhel5u10_orcl10g/config/java2.policy -Djava.security.properties=/u01/app/oracle/product/10/dbhome_1/oc4j/j2ee/home/config/jazn.security.props -DEMDROOT=/u01/app/oracle/product/10/dbhome_1/rhel5u10_orcl10g -Dsysman.md5password=true -Drepapi.oracle.home=/u01/app/oracle/product/10/dbhome_1 -Ddisable.checkForUpdate=true -Djava.awt.headless=true -jar /u01/app/oracle/product/10/dbhome_1/oc4j/j2ee/home/oc4j.jar -config /u01/app/oracle/product/10/dbhome_1/oc4j/j2ee/OC4J_DBConsole_rhel5u10_orcl10g/config/server.xml ora10g 20753 1 0 20:03 ? 00:00:00 ora_pmon_orcl10g ora10g 20755 1 0 20:03 ? 00:00:00 ora_psp0_orcl10g ora10g 20757 1 0 20:03 ? 00:00:00 ora_mman_orcl10g ora10g 20759 1 0 20:03 ? 00:00:00 ora_dbw0_orcl10g ora10g 20761 1 0 20:03 ? 00:00:00 ora_lgwr_orcl10g ora10g 20763 1 0 20:03 ? 00:00:00 ora_ckpt_orcl10g ora10g 20765 1 0 20:03 ? 00:00:00 ora_smon_orcl10g ora10g 20767 1 0 20:03 ? 00:00:00 ora_reco_orcl10g ora10g 20769 1 0 20:03 ? 00:00:00 ora_cjq0_orcl10g ora10g 20771 1 0 20:03 ? 00:00:00 ora_mmon_orcl10g ora10g 20773 1 0 20:03 ? 00:00:00 ora_mmnl_orcl10g ora10g 20775 1 0 20:03 ? 00:00:00 ora_d000_orcl10g ora10g 20777 1 0 20:03 ? 00:00:00 ora_s000_orcl10g ora10g 20781 1 0 20:03 ? 00:00:00 ora_arc0_orcl10g ora10g 20783 1 0 20:03 ? 00:00:00 ora_arc1_orcl10g ora10g 20785 1 0 20:03 ? 00:00:00 ora_arc2_orcl10g ora10g 20790 1 0 20:03 ? 00:00:00 ora_qmnc_orcl10g ora10g 20817 1 0 20:03 ? 00:00:00 ora_j000_orcl10g ora10g 20825 1 0 20:03 ? 00:00:00 oracleorcl10g (LOCAL=NO) ora10g 20829 1 0 20:03 ? 00:00:00 ora_q001_orcl10g ora10g 20831 1 0 20:03 ? 00:00:00 ora_q002_orcl10g ora10g 20834 1 0 20:03 ? 00:00:00 oracleorcl10g (LOCAL=NO) ora10g 20840 1 0 20:03 ? 00:00:00 oracleorcl10g (LOCAL=NO) ora10g 20859 1 0 20:03 ? 00:00:00 oracleorcl10g (LOCAL=NO) ora10g 20861 1 0 20:03 ? 00:00:00 oracleorcl10g (LOCAL=NO) ora10g 20863 1 0 20:03 ? 00:00:00 oracleorcl10g (LOCAL=NO) ora10g 31062 1 0 13:43 ? 00:00:00 /u01/app/oracle/product/10/dbhome_1/bin/tnslsnr LISTENER -inherit ######################## ### End Search. (NOTICE): Make sure upon processes is you real want to KILLED. [Yes or No] (Answer): No Your answer is: No. This script will not continue. Try run This script again, and choose another SEARCHING STRING. ========================== Finished. End: Mon Oct 6 20:05:22 PDT 2014 [root@rhel5u10 script]# [root@rhel5u10 script]# sh linux_do_process_job.sh ========================== Script Killing Processes. Start: Mon Oct 6 20:15:18 PDT 2014 (Question) Please Enter Searching String: (Answer): ora_ ------ ------ ------ ### Process Searching String: ora_ ### How many Processes found by the SEARCHING STRING, Count is: 24 ------- Searching Result ------- ### Begin Search. ######################## ora10g 21523 1 0 20:14 ? 00:00:00 ora_pmon_orcl10g ora10g 21525 1 0 20:14 ? 00:00:00 ora_psp0_orcl10g ora10g 21527 1 0 20:14 ? 00:00:00 ora_mman_orcl10g ora10g 21529 1 0 20:14 ? 00:00:00 ora_dbw0_orcl10g ora10g 21531 1 0 20:14 ? 00:00:00 ora_lgwr_orcl10g ora10g 21533 1 0 20:14 ? 00:00:00 ora_ckpt_orcl10g ora10g 21535 1 0 20:14 ? 00:00:00 ora_smon_orcl10g ora10g 21537 1 0 20:14 ? 00:00:00 ora_reco_orcl10g ora10g 21539 1 0 20:14 ? 00:00:00 ora_cjq0_orcl10g ora10g 21541 1 0 20:14 ? 00:00:00 ora_mmon_orcl10g ora10g 21543 1 0 20:14 ? 00:00:00 ora_mmnl_orcl10g ora10g 21545 1 0 20:14 ? 00:00:00 ora_d000_orcl10g ora10g 21547 1 0 20:14 ? 00:00:00 ora_s000_orcl10g ora10g 21553 1 0 20:14 ? 00:00:00 ora_arc0_orcl10g ora10g 21555 1 0 20:14 ? 00:00:00 ora_arc1_orcl10g ora10g 21557 1 0 20:14 ? 00:00:00 ora_arc2_orcl10g ora10g 21559 1 0 20:14 ? 00:00:00 ora_qmnc_orcl10g ora10g 21567 1 0 20:14 ? 00:00:00 ora_j000_orcl10g ora10g 21582 1 0 20:14 ? 00:00:00 ora_q000_orcl10g ora10g 21584 1 0 20:14 ? 00:00:00 ora_q001_orcl10g ora10g 21586 1 0 20:14 ? 00:00:00 ora_q002_orcl10g ora10g 21588 1 0 20:14 ? 00:00:00 ora_q003_orcl10g ora10g 21590 1 0 20:14 ? 00:00:00 ora_q004_orcl10g ora10g 21592 1 0 20:14 ? 00:00:00 ora_q005_orcl10g ######################## ### End Search. (NOTICE): Make sure upon processes is you real want to KILLED. [Yes or No] (Answer): Yes Your answer is: Yes. This script will CONTINUE. ### (Do Kill) Start: 21523 21525 21527 21529 21531 21533 21535 21537 21539 21541 21543 21545 21547 21553 21555 21557 21559 21567 21582 21584 21586 21588 21590 21592 ### (Do kill) Done : 21523 21525 21527 21529 21531 21533 21535 21537 21539 21541 21543 21545 21547 21553 21555 21557 21559 21567 21582 21584 21586 21588 21590 21592 ========================== Finished. End: Mon Oct 6 20:15:23 PDT 2014 [root@rhel5u10 script]# [root@rhel5u10 script]# ps -ef | grep ora_ root 21667 19103 0 20:16 pts/2 00:00:00 grep ora_ [root@rhel5u10 script]# |
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
[root@rhel5u10 script]# cat linux_do_process_job.sh #!/bin/bash # This script used for kill processes. # Intro # -------------- echo "==========================" echo "Script Killing Processes." echo "Start: "`date` echo "" # Get Process Searching String echo "(Question) Please Enter Searching String: " echo "(Answer): " read str_process_searching echo "------ ------ ------" echo "### Process Searching String: $str_process_searching" # Get Meta Info. num_searching_result_counts=`ps -ef | grep -v grep | grep --color $str_process_searching | wc -l` # Display Searching Result, Counts: echo "### How many Processes found by the SEARCHING STRING, Count is: $num_searching_result_counts" # Display Searching Result, Entries: echo "" echo "------- Searching Result -------" echo "" echo "### Begin Search." echo "########################" ps -ef | grep -v grep | grep --color $str_process_searching echo "########################" echo "### End Search." echo "" echo "(NOTICE): Make sure upon processes is you real want to KILLED." echo "[Yes or No]" echo "" echo "(Answer): " read ans_sure_continue_script if [ $ans_sure_continue_script = "Yes" ] then echo "Your answer is: $ans_sure_continue_script." echo "This script will CONTINUE." # Do while job to KILLING PROCESSES # ---------------------------------------------- #processes_list_while=`ps -ef | grep -v grep | grep --color $str_process_searching | awk '{if($3~/^[0-9]+$/)print $2}'` processes_list=`ps -ef | grep -v grep | grep --color $str_process_searching | awk '{if($3~/^[0-9]+$/)print $2}'` #echo "--- While Job: Started." #echo "" #echo $processes_list_while | while read p_list_while_entry #do # echo "### (Do Kill) Process ID: $p_list_while_entry" # kill -9 $p_list_while_entry # echo "### (Do kill) Done: $p_list_while_entry" # echo "=== ===" #done echo "### (Do Kill) Start: "`echo $processes_list` kill -9 $processes_list echo "### (Do kill) Done : "`echo $processes_list` # ---------------------------------------------- elif [ $ans_sure_continue_script = "No" ] then echo "Your answer is: $ans_sure_continue_script." echo "This script will not continue." echo "Try run This script again, and choose another SEARCHING STRING." else echo "Your answer is: $ans_sure_continue_script." echo "The request is not SUPPORT." fi echo "==========================" echo "Finished." echo "End: "`date` echo "" [root@rhel5u10 script]# |
版本二、基于for
效果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 |
[root@rhel5u10 script]# sh linux_do_process_job.sh ========================== Script Killing Processes. Start: Mon Oct 6 20:24:42 PDT 2014 (Question) Please Enter Searching String: (Answer): ora_ ------ ------ ------ ### Process Searching String: ora_ ### How many Processes found by the SEARCHING STRING, Count is: 19 ------- Searching Result ------- ### Begin Search. ######################## ora10g 21905 1 0 20:22 ? 00:00:00 ora_pmon_orcl10g ora10g 21907 1 0 20:22 ? 00:00:00 ora_psp0_orcl10g ora10g 21909 1 0 20:22 ? 00:00:00 ora_mman_orcl10g ora10g 21911 1 0 20:22 ? 00:00:00 ora_dbw0_orcl10g ora10g 21913 1 0 20:22 ? 00:00:00 ora_lgwr_orcl10g ora10g 21915 1 0 20:22 ? 00:00:00 ora_ckpt_orcl10g ora10g 21917 1 0 20:22 ? 00:00:00 ora_smon_orcl10g ora10g 21919 1 0 20:22 ? 00:00:00 ora_reco_orcl10g ora10g 21921 1 0 20:22 ? 00:00:00 ora_cjq0_orcl10g ora10g 21923 1 0 20:22 ? 00:00:00 ora_mmon_orcl10g ora10g 21925 1 0 20:22 ? 00:00:00 ora_mmnl_orcl10g ora10g 21927 1 0 20:22 ? 00:00:00 ora_d000_orcl10g ora10g 21929 1 0 20:22 ? 00:00:00 ora_s000_orcl10g ora10g 21934 1 0 20:22 ? 00:00:00 ora_arc0_orcl10g ora10g 21936 1 0 20:22 ? 00:00:00 ora_arc1_orcl10g ora10g 21940 1 0 20:22 ? 00:00:00 ora_qmnc_orcl10g ora10g 21964 1 0 20:23 ? 00:00:00 ora_q001_orcl10g ora10g 21966 1 0 20:23 ? 00:00:00 ora_q002_orcl10g ora10g 21998 1 0 20:23 ? 00:00:00 ora_j000_orcl10g ######################## ### End Search. (NOTICE): Make sure upon processes is you real want to KILLED. [Yes or No] (Answer): Yes Your answer is: Yes. This script will CONTINUE. --- Current Process ID: 21905 Killing... ### Done --- Current Process ID: 21907 Killing... ### Done --- Current Process ID: 21909 Killing... ### Done --- Current Process ID: 21911 Killing... ### Done --- Current Process ID: 21913 Killing... ### Done --- Current Process ID: 21915 Killing... ### Done --- Current Process ID: 21917 Killing... ### Done --- Current Process ID: 21919 Killing... ### Done --- Current Process ID: 21921 Killing... ### Done --- Current Process ID: 21923 Killing... ### Done --- Current Process ID: 21925 Killing... ### Done --- Current Process ID: 21927 Killing... ### Done --- Current Process ID: 21929 Killing... ### Done --- Current Process ID: 21934 Killing... ### Done --- Current Process ID: 21936 Killing... ### Done --- Current Process ID: 21940 Killing... ### Done --- Current Process ID: 21964 Killing... ### Done --- Current Process ID: 21966 Killing... ### Done --- Current Process ID: 21998 Killing... ### Done ========================== Finished. End: Mon Oct 6 20:24:49 PDT 2014 [root@rhel5u10 script]# [root@rhel5u10 script]# ps -ef | grep ora_ root 22032 19103 0 20:24 pts/2 00:00:00 grep ora_ [root@rhel5u10 script]# |
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
[root@rhel5u10 script]# cat linux_do_process_job.sh #!/bin/bash # This script used for kill processes. # Intro # -------------- echo "==========================" echo "Script Killing Processes." echo "Start: "`date` echo "" # Get Process Searching String echo "(Question) Please Enter Searching String: " echo "(Answer): " read str_process_searching echo "------ ------ ------" echo "### Process Searching String: $str_process_searching" # Get Meta Info. num_searching_result_counts=`ps -ef | grep -v grep | grep --color $str_process_searching | wc -l` # Display Searching Result, Counts: echo "### How many Processes found by the SEARCHING STRING, Count is: $num_searching_result_counts" # Display Searching Result, Entries: echo "" echo "------- Searching Result -------" echo "" echo "### Begin Search." echo "########################" ps -ef | grep -v grep | grep --color $str_process_searching echo "########################" echo "### End Search." echo "" echo "(NOTICE): Make sure upon processes is you real want to KILLED." echo "[Yes or No]" echo "" echo "(Answer): " read ans_sure_continue_script if [ $ans_sure_continue_script = "Yes" ] then echo "Your answer is: $ans_sure_continue_script." echo "This script will CONTINUE." # Do while job to KILLING PROCESSES # ---------------------------------------------- #processes_list_while=`ps -ef | grep -v grep | grep --color $str_process_searching | awk '{if($3~/^[0-9]+$/)print $2}'` processes_list=`ps -ef | grep -v grep | grep --color $str_process_searching | awk '{if($3~/^[0-9]+$/)print $2}'` # ---------------------------------------------- #echo "--- While Job: Started." #echo "" #echo $processes_list_while | while read p_list_while_entry #do # echo "### (Do Kill) Process ID: $p_list_while_entry" # kill -9 $p_list_while_entry # echo "### (Do kill) Done: $p_list_while_entry" # echo "=== ===" #done # ---------------------------------------------- #echo "### (Do Kill) Start: "`echo $processes_list` #kill -9 $processes_list #echo "### (Do kill) Done : "`echo $processes_list` # ---------------------------------------------- for entry in $processes_list do echo "--- Current Process ID: $entry" echo "Killing..." kill -9 $entry echo "### Done" echo "" done # ---------------------------------------------- elif [ $ans_sure_continue_script = "No" ] then echo "Your answer is: $ans_sure_continue_script." echo "This script will not continue." echo "Try run This script again, and choose another SEARCHING STRING." else echo "Your answer is: $ans_sure_continue_script." echo "The request is not SUPPORT." fi echo "==========================" echo "Finished." echo "End: "`date` echo "" [root@rhel5u10 script]# |
注意:执行批量杀进程脚本有风险,在执行前,请再三确认操作的合规、正确,以及操作的对象的正确性:确认要删除的进程,确实是希望删除的进程。
这很重要。
————————————————————————————————
Ending。