URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 79917
[ Назад ]

Исходное сообщение
"как получить PID запущенного процесса"

Отправлено Dimkap , 21-Апр-08 13:26 
Запускается java прилада командой /usr/java/jre1.6.0_06/bin/java -Xmx128m -jar /home/notes/JavaAgent.jar
как получить PID получившегося процесса?
Нужно контролировать, чтобы был запущен только один экземпляр процесса.

Содержание

Сообщения в этом обсуждении
"как получить PID запущенного процесса"
Отправлено angra , 21-Апр-08 14:06 
Если в баше, то $!

"как получить PID запущенного процесса"
Отправлено Dimkap , 21-Апр-08 14:12 
>Если в баше, то $!

например скрипт выглядит так:
-------
#!/bin/bash                                                                                                                                                    
                                                                                                                                          
/usr/java/jre1.6.0_06/bin/java -Xmx128m -jar /home/notes/JavaAgent.jar
--------
он запускается кроном
каким образом сделать проверку перед запуском, что предыдущий процесс закончен, если процесс не закончен не надо запускать.


"как получить PID запущенного процесса"
Отправлено angra , 21-Апр-08 19:28 
Наиболее распространенный алгоритм для вашей задачи при условии синхронного выполнения:
1. Проверяем наличие лок-файла(например /tmp/JavaAgent.lock), если он есть то выходим
2. создаем лок-файл
3. запускаем все что нужно
4. убираем лок-файл и выходим.
Если запускаемый процесс асинхронный(то есть остается работать и сразу возвращает управление), то придется таки получать его PID, сохранять в файлике и проверять наличие процесса с этим pid, например через /proc

"как получить PID запущенного процесса"
Отправлено Gennadi , 22-Апр-08 18:51 

так:
----------------------
#!/bin/bash
JA_PID=/var/run/JavaAgent.pid
/usr/java/jre1.6.0_06/bin/java -Xmx128m -jar /home/notes/JavaAgent.jar
echo $! > $JA_PID

echo `cat $JA_PID`
--------------------


или так:
-----------------------
#!/bin/bash
program="JavaAgent.jar"

/usr/java/jre1.6.0_06/bin/java -Xmx128m -jar /home/notes/JavaAgent.jar

PID=`ps -aef | grep "$program" | grep -v grep | awk '{print $2}'`

echo $PID
-----------------------


"как получить PID запущенного процесса"
Отправлено b00ba , 22-Апр-08 20:01 
только не надо забывать, что прозесс может умереть или крашанутся, а pid файл останется

"как получить PID запущенного процесса"
Отправлено Gennadi , 22-Апр-08 20:36 
>только не надо забывать, что прозесс может умереть или крашанутся, а pid
>файл останется

Ну если уж... то так?

#!/bin/bash
#
PROGRAM="JavaAgent.jar"
JA_PID=/var/run/JavaAgent.pid
PROG_BIN="/usr/java/jre1.6.0_06/bin/java -Xmx128m -jar /home/notes/JavaAgent.jar"
PID=`ps -aef | grep "$PROGRAM" | grep -v grep | awk '{print $2}'`

case "$1" in
  start)

    if [ ! -z $PID ]
    then
    echo -n "Daemon JavaAgent is running"
    echo ""
    else
    echo -n "Starting JavaAgent: "
    $PROG_BIN > /dev/null 2>&1 &
    echo $! > $JA_PID
    echo "Daemon JavaAgent started. PID:$!"
    echo ""
    fi
    ;;
  stop)
    echo -n "Shutting down JavaAgent: "
    echo ""
    for i in $PID; do
    kill -9 $i
    rm -f $JA_PID
    done
    echo -n "Daemon JavaAgent is down."
    echo ""
    ;;
  restart)
    $0 stop
    $0 start

    ;;
  status)
    if [ ! -z $PID ]
    then
    echo -n "Daemon JavaAgent is running"
    echo ""
    else
    echo -n "Daemon JavaAgent is down."
    echo ""
    fi
    ;;
  *)
    echo "Usage: JavaAgent {start|stop|restart|status}"
    exit 1
    
esac

exit 0



"как получить PID запущенного процесса"
Отправлено Gennadi , 22-Апр-08 21:42 
PC: Если всё-таки будут запущены несколько процессов "JavaAgent", то будет лучше блок "status)" переписать так:


#!/bin/bash
#
PROGRAM="JavaAgent.jar"
JA_PID=/var/run/JavaAgent.pid
PROG_BIN="/usr/java/jre1.6.0_06/bin/java -Xmx128m -jar /home/notes/JavaAgent.jar"
PID=`ps -aef | grep "$PROGRAM" | grep -v grep | awk '{print $2}'`

case "$1" in
  start)

    if [ ! -z $PID ]
    then
    echo -n "Daemon JavaAgent is running"
    echo ""
    else
    echo -n "Starting JavaAgent: "
    echo ""
    $PROG_BIN > /dev/null 2>&1 &
    echo $! > $JA_PID
    echo "Daemon JavaAgent started. PID:$!"
    echo ""
    fi
    ;;
  stop)
    echo -n "Shutting down JavaAgent: "
    echo ""
    for i in $PID; do
    kill -9 $i
    rm -f $JA_PID
    done
    echo -n "Daemon JavaAgent is down."
    echo ""
    ;;
  restart)
    $0 stop
    $0 start

    ;;
  status)
    STATUS=`ps -aef | grep "$PROGRAM" | grep -v grep | awk '{print $2}' | head -1`
    if [ ! -z $STATUS ]
    then
    echo -n "Daemon JavaAgent is running"
    echo ""
    for i in $PID; do
    echo PID:$i
    done
    echo ""
    else
    echo -n "Daemon JavaAgent is down."
    echo ""
    fi
    ;;
  *)
    echo "Usage: JavaAgent {start|stop|restart|status}"
    exit 1
    
esac

exit 0