2015-02-09 3 views
0

Я новичок в разработке UNIX, и у меня есть следующий код, я считаю, что он связан с файлом управления, но я его вообще не понимаю, если кто-нибудь может мне объяснить, i «буду очень благодаренОбъяснение кода UNIX при создании файла управления

Это код

ARCH_CTRL_LOCK="$RUTA_CFG/servicioPortabilidad.ctl" 
if [ ! -f $ARCH_CTRL_LOCK ]; then 
    (echo "$$" > $ARCH_CTRL_LOCK) 2> /dev/null 
else 
    PID_GUARDADO=`cat $ARCH_CTRL_LOCK` 
    if [ -d /proc/${PID_GUARDADO} ]; then 
    echo "Proceso no iniciado, el archivo $ARCH_CTRL_LOCK existe y su PID esta activo (${PID_GUARDADO}), puede estar ejecutandose otra instancia de este proceso." 
    exit 2 
    fi 
    kill -0 ${PID_GUARDADO} 2> /dev/null 
    echo "" 
    if [ "$?" = "0" ]; then 
    echo "Proceso no iniciado, el archivo $ARCH_CTRL_LOCK existe y su PID responde a senhales (${PID_GUARDADO}), puede estar ejecutandose otra instancia de este proceso." 
    exit 2 
    fi 
    (echo "$$" > $ARCH_CTRL_LOCK) 2> /dev/null 
fi 

спасибо

ответ

1
# Store the name of the lock file in a variable, so we can use 
# it repeatedly. 
ARCH_CTRL_LOCK="$RUTA_CFG/servicioPortabilidad.ctl" 

# See if the lock file exists. 
if [ ! -f $ARCH_CTRL_LOCK ]; then 
    # The lock file doesn't exist. 

    # Write my own process ID into the file, creating it 
    (echo "$$" > $ARCH_CTRL_LOCK) 2> /dev/null 

else 
    # The lock file DOES exist. 

    # Get the process ID from the existing lock file. This should be 
    # the ID of the process that created the lock file. 
    PID_GUARDADO=`cat $ARCH_CTRL_LOCK` 

    # Looking for a directory named /proc/PID is a way of checking 
    # whether that process exists. This only works on operating systems 
    # that have a /proc filesystem. Linux always has /proc, but many 
    # other systems (like Mac OS X for example) don't. 

    if [ -d /proc/${PID_GUARDADO} ]; then 
    # The process still exists. 

    # Print an error message. 
    echo "Proceso no iniciado, el archivo $ARCH_CTRL_LOCK existe y su PID esta activo (${PID_GUARDADO}), puede estar ejecutandose otra instancia de este proceso." 

    # Exit with status 2. 
    # All statuses except 0 mean there was an error. 
    exit 2 
    fi 

    # The process doesn't still exist. But the kill command that 
    # follows checks for the process in a different way, that works 
    # on any POSIX system. The kill command exits with status 0 
    # (meaning success) if the process exists, and exists with some 
    # other status (meaning error) if the process doesn't exist. 
    kill -0 ${PID_GUARDADO} 2> /dev/null 

    # The following echo command prints a blank line. It also makes 
    # the shell forget about the exit status of the kill command. 
    echo "" 

    # Now see if the exit status from the last command is zero. I 
    # guess this was intended to check the exit status of kill, but 
    # someone inserted that echo command, which should always exit 
    # with status 0, so the test will always pass! 
    if [ "$?" = "0" ]; then 
    # The exit status of the last command was 0. This should always 
    # be the case. The echo command above should always succeed. 

    # Print an error message. 
    echo "Proceso no iniciado, el archivo $ARCH_CTRL_LOCK existe y su PID responde a senhales (${PID_GUARDADO}), puede estar ejecutandose otra instancia de este proceso." 

    # Exit with status 2. 
    exit 2 
    fi 

    # We can never reach this point, because the echo above should 
    # always succeed, so we always print the error message and exit 
    # in the previous if statement. 

    # Overwrite contents of the lock file with my own process ID. 
    (echo "$$" > $ARCH_CTRL_LOCK) 2> /dev/null 
fi 

Technically, команда echo "" может потерпеть неудачу, но только если стандартный вывод put был закрыт или перенаправлен в файл на полную файловую систему или каким-либо другим способом настроен таким образом, что он не подлежит написанию. Это очень маловероятно.

+0

Это отличный урок в том, как подойти к определению кода, который вы не знаете. Когда вы узнаете, что он делает, добавьте комментарии. Вернитесь назад и добавьте резюме того, что делает раздел кода в целом. Ошибки могут быть обнаружены во время процесса, которые определяют причину, почему вы исследуете это в первую очередь. Затем изучите это и напишите свой код с комментариями в первую очередь! Если оригинальный автор сделал это, вы бы не потратили, кто знает, как долго это выясняется. Не забудьте указать для человека, поддерживающего это после вас, кто может быть не таким опытным. –

Смежные вопросы