The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Как присвоить переменной PID процесса"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Shell скрипты)
Изначальное сообщение [ Отслеживать ]

"Как присвоить переменной PID процесса"  +/
Сообщение от sad_robert email(ok) on 22-Янв-12, 16:05 
Здравствуйте!
Проблема следующая: вообще нужно написать скрипт, который предлагал бы пользователю пронумерованный список процессов в системе, после чего пользователь мог бы выбрать номер процесса в списке, после чего этот процесс бы завершался.

Думаю, что процесс нужно завершать через kill -9 $имя_переменной, где в переменной хранится PID процесса. Проблема в том, что я не знаю, как это все организовать.

Другими словами, после запуска пользователь должен видеть пронумерованный список процессов с предложением ввести номер процесса, который следует убить, после ввода номера этот процесс завершается.

Заранее спасибо за ответы.

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Как присвоить переменной PID процесса"  +/
Сообщение от PavelR (??) on 22-Янв-12, 17:45 

> Заранее спасибо за ответы.

обратись к преподавателю, почитай методику.


Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Как присвоить переменной PID процесса"  +/
Сообщение от sad_robert email(ok) on 22-Янв-12, 17:56 
>> Заранее спасибо за ответы.
> обратись к преподавателю, почитай методику.

Преподаватель шлет меня в гугл, - да и если бы я не безуспешно перерывал маны в интернете, то вряд ли бы такой вопрос задал.

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "Как присвоить переменной PID процесса"  +/
Сообщение от allez (ok) on 22-Янв-12, 18:29 
>>> Заранее спасибо за ответы.
>> обратись к преподавателю, почитай методику.
> Преподаватель шлет меня в гугл, - да и если бы я не
> безуспешно перерывал маны в интернете, то вряд ли бы такой вопрос
> задал.

В Гугл в данном случае  лезть совсем не обязательно, так как все необходимые маны
есть на Опеннете.

Вам понадобятся как минимум два из них:
man ps - https://www.opennet.ru/man.shtml?topic=ps&category=1&russian=5
man read - https://www.opennet.ru/man.shtml?topic=read&category=1&russian=5

Если вдруг преподаватель потребует как-то по-другому нумеровать список процессов,
то пригодятся эти маны:
man nl - https://www.opennet.ru/man.shtml?topic=nl&category=1&russian=0
man sort - https://www.opennet.ru/man.shtml?topic=sort&category=1&russian=0

Ну а для того, чтобы знать, как из потока текста извлечь нужное, читайте это:
man grep - https://www.opennet.ru/man.shtml?topic=grep&category=1&russian=0
man awk - https://www.opennet.ru/man.shtml?topic=awk&category=1&russian=0
man sed - https://www.opennet.ru/man.shtml?topic=sed&category=1&russian=0

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "Как присвоить переменной PID процесса"  +/
Сообщение от кегна on 22-Янв-12, 19:05 
>>> Заранее спасибо за ответы.
>> обратись к преподавателю, почитай методику.
> Преподаватель шлет меня в гугл, - да и если бы я не
> безуспешно перерывал маны в интернете, то вряд ли бы такой вопрос
> задал.

Пыщ)
ps -A | grep -v PID | awk {'print NR, $1'}
для затравки ;-)

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

5. "Как присвоить переменной PID процесса"  +/
Сообщение от erera22 (ok) on 23-Янв-12, 14:08 
Скрипт, который выводит по пиду имя процесса. kill допишешь сам. Как и проверку на то, что процесс в самом деле помер ;-)

#!/bin/bash

function listing
{
   array=$1
   if [ ${#array[@]} -eq 0 ]; then
      return 1
   fi

   index=0
   for i in ${array[@]}
   do
      for (( ; ; ))
      do
         if [ ! -z ${array[$index]} ]; then
            printf "$index\t$i\n"
            break
         else
            index=$(($index+1))
         fi
      done
      index=$(($index+1))
   done

   return 0
}

proc=$(ps -A | grep -v PID | awk '{ print $1, $4 }')
array=( )
count=0
rest=0

for i in $proc
do
   let rest=$count%2
   if [ $rest -eq 0 ]; then
      pid=$i
   else
      array[$pid]=$i
   fi

   count=$(($count+1))
done

printf "V - view array\nQ - quit\n"

btn=0
while [ "$btn" != "q" ] || [ "$btn" != "Q" ]
do
   echo -n "Enter the PID number: "
   read btn
  
   echo "$btn" | grep -i "q" > /dev/null
   if [ $? -eq 0 ]; then
      exit 0
   fi

   if [ "$btn" == "v" ] || [ "$btn" == "V" ]; then
      listing $array
      if [ $? -eq 1 ]; then
         echo "Cound not found process list"
         exit 1
      fi
   fi

   echo "$btn" | grep [[:alpha:]] > /dev/null
   retval=$?

   if [ $retval -eq 1 ] && [ ! -z ${array["$btn"]} ]; then
      echo "Process with PID $btn named ${array[$btn]}"
   else
      echo "Process with PID '$btn' was not found"
   fi
done

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

6. "Как присвоить переменной PID процесса"  +/
Сообщение от pavlinux (ok) on 04-Фев-12, 05:11 
$ top
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру