核心伺服器上跑了一堆的指令碼、程式,難免有時候會出現殭屍程序,死不死活不活的在那裡占用資源,程式設計客棧最初只是寫了個根據關鍵字查殺程序的linux shell指令碼,後來發現很多時候程序死在那裡的時候其實是內部呼叫子程序的時候出現了問題,這時候光殺父程序根本沒解決根本問題。比如說rsync的時候通過ssh來連線,rsync本身沒問題,但可能ssh死掉了。因此重新寫了指令碼,遞迴查詢子程序。
複製** **如下:
#!/bin/sh
# 遞迴找到導致程序僵死的最底層子程序並殺除.
parentprocessid=$1;
if [ "x$" = "x" ] ; then
echo "please supply the top parent process id to be killed!"
echo "usage:sh $0 pid [-v]"
echo "pid the parent process id as root"
echo "-v is this argument supplied,no real kill operation will be performed,only process tree be show."
; exit 1
filet isrealkilldo=1;
if [ "x$2" = "x-v" ] ; then
let isrealkilldo=0;
fiecho "begin kill the leaf process of process $" >&2
killpidlist=""
function loopnextsubprocess()isparent"|grep -v grep|grep -v "$$" | awk ''`
ps --format='%p%p%a' --width 2048 -w -p $|grep -v grep|grep -v "$$" >&2
if [ "x$" = "x" ] ; then
echo "****got one leaf = [$]****" >&2
killpidlist="$\n$"
return
fifor thenextpid in $ ; do
loopnextsubprocess $
done
}loopnextsubprocess $
if [ $ -eq 1 -a "x$" != "x" ] ; then
for curpid in `echo -e $` ; do
if [ "x$" != "x" ] ; then
echo "kill -9 $"
kill -9 $
fidone
else
echo -e $
fi
本文標題: shell指令碼實現查殺子程序、殭屍程序
本文位址: /os/linux/119036.html
shell指令碼子程序太多的查殺方法
之前寫的監控指令碼,有太多的子程序,如果直接kill主程序,子程序會歸到init程序直到執行完畢。所以查殺起來比較麻煩 在寫指令碼的時候可以記錄pid放到乙個檔案裡,再用指令碼查殺比較方便 例如,執行指令碼如下,記錄程序號到pid檔案 echo pid while do for i in seq 1...
shell指令碼實現檢視tomcat日誌
logs catalina.out,每次查個log,都得進很深的目錄,很麻煩,浪費時間。而且來來回回就幾個命令。檢視專案實時輸出的日誌 指令碼名稱 cat catalina log.sh 指令碼執行方式 sh cat catalina log.sh tomcat 8108 bin bash tail...
shell指令碼實現程序重啟
bin bash id ps ef grep zabbix grep v 0 grep v zabbix agentd grep v grep awk for id in id dokill 9 id done echo su zabbix 注意 1 不能使用pkill zabbix server ...