#!/bin/sh PATH=.:$PATH export PATH THIS_PID=`echo $$` THIS_NAME=$0 PID_FILE=default.pid OUT_FILE=nohup.out while [ TRUE ] do if [ "$1" = "-pid" ] then PID_FILE=$2 if [ "$2" != "" ] then shift 2 fi continue fi if [ "$1" = "-out" ] then OUT_FILE=$2 if [ "$2" != "" ] then shift 2 fi continue fi break done CMD_LINE=$* if [ "$CMD_LINE" = "" ] then echo "cmd like :$THIS_NAME [-pid def.pid] [-out nohup.out] cmd paramlist" exit fi PREV_PID= if [ -f "$PID_FILE" ] then read PREV_PID < $PID_FILE GREP_STR=`ps -ef -o pid | grep $PREV_PID` if [ "$GREP_STR" != "" ] then echo "process has been running in memory!" exit fi fi # begin command date '+DATETIME: %Y/%m/%d %H:%M:%S' >> $OUT_FILE nohup $CMD_LINE >> $OUT_FILE & sleep 1 # end command SUB_PID_SET= NEW_PPID_SET=$THIS_PID while [ TRUE ] do NEXT_PPID_SET= for ii in $NEW_PPID_SET do TMP_PID_SET=`ps -ef -o pid,ppid | grep $ii | awk '{printf "%s\n",$1 }'` for jj in $TMP_PID_SET do TMP_VAL=`ps -ef -o pid | grep $jj` if [ "$TMP_VAL" = "" ] then continue fi if [ "$jj" != "$ii" ] then SUB_PID_SET=$SUB_PID_SET" "$jj NEXT_PPID_SET=$NEXT_PPID_SET" "$jj fi done done NEW_PPID_SET=$NEXT_PPID_SET if [ "$NEW_PPID_SET" = "" ] then break fi done END_PPID_LIST=`ps -ef -o ppid` for ii in $SUB_PID_SET do TEST_VAL= for jj in $END_PPID_LIST do if [ "$ii" = "$jj" ] then TEST_VAL=$ii break fi done if [ "$TEST_VAL" != "" ] then continue fi echo $ii > $PID_FILE exit done
singletask.sh
猜你喜欢
转载自www.cnblogs.com/wzh313/p/9124502.html
今日推荐
周排行