我们经常会遇到这种开发问题, 在同一台机器上后台启动多个进程.
这时我们需要使用脚本来启动,停止,监控每个进程,那么由于进程名称相同,使用 ps -ef | grep $excname 的形式无法区分每个进程,
此时我们该怎么办呢?
有一种解决办法是在启动每个进程时记录其进程号,然后在停止,监控该进程时只需对进程号操作就可以了.
办法如下:
启动时记录进程号写入某个文件:
nohup ./a.sh 1>log 2>&1 &
echo $! > svr.pid #
获取启动进程的进程号
实际上 hadoop 的启动、停止脚本就是这么做的, 例如:
hadoop-daemon.sh
pid=$HADOOP_PID_DIR/hadoop-$HADOOP_IDENT_STRING-$command.pid
启动时:
if [ -f $pid ]; then
if
kill -0 `cat $pid` > /dev/null 2>&1; then
# kill -0 测试指定进程号的进程是否存在 #
echo $command running as process `cat $pid`. Stop it first.
exit 1
fi
fi
nohup nice -n $HADOOP_NICENESS "$HADOOP_HOME"/bin/hadoop --config $HADOOP_CONF_DIR $command "$@" > "$log" 2>&1 < /dev/null &
echo $! > $pid
sleep 1; head "$log"
;;
停止时:
if [ -f $pid ]; then
if
kill -0 `cat $pid` > /dev/null 2>&1; then
echo stopping $command
kill `cat $pid`
else
echo no $command to stop
fi
else
echo no $command to stop
fi