〖Linux〗以后台方式启动/结束指定程序/命令(不受 exit 或点击窗口关闭按钮等终端退出操作的影响)

#!/bin/bash - 
#===============================================================================
#
#          FILE: bgcmd
# 
#         USAGE: 方式1 -- $ ./bgcmd             # 启动指定后台程序
#                方式2 -- $ ./bgcmd off         # 结束指定后台程序
# 
#   DESCRIPTION: 后台运行程序/命令(类似于deamon进程)
# 
#       OPTIONS: ---
#  REQUIREMENTS: >> 按需要修改 cmd 和 need_root 这两个变量<<
#          BUGS: ---
#         NOTES: ---
#        AUTHOR: linkscue(scue),
#  ORGANIZATION: 
#       CREATED: 2013年08月14日 22时04分38秒 HKT
#      REVISION:  ---
#===============================================================================

get_process(){
    cmd="$1"
    ps aux | grep -v 'grep' | grep "$cmd" | awk '{print $2}'
}

kill_process(){
    exist="$1"
    if [[ "$need_root" != "" ]]; then
        sudo kill $exist
    else
        kill $exist
    fi
    echo "process [ $(echo $exist) ] had killed."
}

#-------------------------------------------------------------------------------
#  cmd: 希望在后台执行的程序/命令
#  need_root: 是否需要root权限执行
#-------------------------------------------------------------------------------
need_root=true
cmd="python -m SimpleHTTPSever 80"

# get root, if need.
if [[ "$need_root" != "" ]]; then
    sudo ls > /dev/null
    ret=$?
    if [[ $ret != 0 ]]; then
        echo "can't get root, exit."
        exit 1
    fi
fi

# run cmd
exist=$(get_process "$cmd")
if [[ "$1" != "" ]] ; then                      # kill process
    kill_process "$exist"
else
    if [[ "$exist" != "" ]]; then
        kill_process "$exist"
    fi
    if [[ "$need_root" != "" ]]; then
        sudo nohup $cmd >/dev/null 2>&1 &       # run as root
    else
        nohup $cmd > /dev/null 2>&1 &           # run as other
    fi
    sleep 0.1
    exist=$(get_process "$cmd")
    echo "run [ $(echo $exist) ] at background."
fi

 

posted @ 2013-09-01 21:01  scue  阅读(1404)  评论(1编辑  收藏  举报