Искусство программирования на языке сценариев командной оболочки


Программирование на языке сценариев командной оболочки - стр. 257


ARGNO=1 # Число, ожидаемых из командной строки, аргументов. E_WRONGARGS=65 E_BADPID=66 E_NOSUCHPROCESS=67 E_NOPERMISSION=68 PROCFILE=exe

if [ $# -ne $ARGNO ] then echo "Порядок использования: `basename $0` PID-процесса" >&2 # Сообщение об ошибке на >stderr. exit $E_WRONGARGS fi

ps ax

pidno=$( ps ax | grep $1 | awk '{ print $1 }' | grep $1 ) # Проверка наличия процесса с заданным pid в списке, выданном командой "ps", поле #1. # Затем следует убедиться, что этот процесс не был запущен этим сценарием ('ps'). # Это делает последний "grep $1". if [ -z "$pidno" ] # Если после фильтрации получается пустая строка, then # то это означает, что в системе нет процесса с заданым pid. echo "Нет такого процесса." exit $E_NOSUCHPROCESS fi

# Альтернативный вариант: # if ! ps $1 > /dev/null 2>&1 # then # в системе нет процесса с заданым pid. # echo "Нет такого процесса." # exit $E_NOSUCHPROCESS # fi

if [ ! -r "/proc/$1/$PROCFILE" ] # Проверить право на чтение. then echo "Процесс $1 найден, однако..." echo "у вас нет права на чтение файла /proc/$1/$PROCFILE." exit $E_NOPERMISSION # Обычный пользователь не имеет прав # на доступ к некоторым файлам в каталоге /proc. fi

# Последние две проверки могут быть заменены на: # if ! kill -0 $1 > /dev/null 2>&1 # '0' -- это не сигнал, но # команда все равно проверит наличие # процесса-получателя. # then echo "Процесс с данным PID не найден, либо вы не являетесь его владельцем" >&2 # exit $E_BADPID # fi

exe_file=$( ls -l /proc/$1 | grep "exe" | awk '{ print $11 }' ) # Или exe_file=$( ls -l /proc/$1/exe | awk '{print $11}' ) # # /proc/pid-number/exe -- это символическая ссылка # на исполняемый файл работающей программы.

if [ -e "$exe_file" ] # Если файл /proc/pid-number/exe существует... then # то существует и соответствующий процесс. echo "Исполняемый файл процесса #$1: $exe_file." else echo "Нет такого процесса." fi




- Начало -  - Назад -  - Вперед -