Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: убивать процесс по кронтабу.  (Прочитано 25662 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Chuda
Гость
« : 13-07-2006 13:46 » 

Есть такая необходимость - каждые десять минут проверять, не запущен ли процесс, и если запущен, то убивать его.
То есть, то, что обычно делается как kill pid в кронтабе.
А как-то же самое сделать в виндавс?
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #1 : 13-07-2006 18:54 » 

Насколько я знаю, из командной строки винды нельзя убить процесс. Можно сделать программу на С++, И с помошь ее убивать процесс.
Есть библиотека ToolHelp. С помошью его искать индефикатор процесса, и затем вызывать команду TerminateProcess. Даже можно сделать так, чтобы процесс вообше не запускался.
« Последнее редактирование: 13-07-2006 18:56 от Finch » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 14-07-2006 10:17 » 

Можно поставить Cygwin, в нём есть cron и kill, умеющий убивать виндовые процессы
Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
Chuda
Гость
« Ответ #3 : 14-07-2006 15:58 » 

Жаль
как же в виндах всё сложно и коряво Жаль
cygwin не катит.
куда смотреть, чтоб прогу на С++ сделать, которая сможет так делать?
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 14-07-2006 16:16 » 

Chuda, как уже сказал Finch - см. toolhelp в MSDN-е. Там принцип такой: деается снимок состояния и по нему ищешь нужный процесс.


Это кусочек кода я давно еще под win98 писал и не уверен на все 100%, что под NT будет работать. Поиск производится по полному пути к исполняемому файлу.
Код:
#include <windows.h>
#include <winbase.h>
#include <tlhelp32.h>
#include <string.h>

PROCESSENTRY32 pe;
HANDLE ss;

strupr(lp); // lp - absolute path to executable file

pe.dwSize = sizeof(PROCESSENTRY32);

ss = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

for (i = Process32First(ss, &pe); i; i = Process32Next(ss, &pe))
{
if(!strcmp(pe.szExeFile, lp))
{
TerminateProcess(OpenProcess(PROCESS_TERMINATE, TRUE, pe.th32ProcessID), -1);
break;
}
}
CloseHandle(ss);

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

* Killer 0_3b.rar (2.07 Кб - загружено 1036 раз.)
« Последнее редактирование: 14-07-2006 16:23 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #5 : 15-07-2006 07:00 » 

Этот вопрос есть в FAQ https://forum.shelek.ru/index.php/topic,8674.msg130698.html#msg130698
Жаль
как же в виндах всё сложно и коряво Жаль

Тут надо исходить из исторических предпосылок. МС-ДОС был однозадачной и однопользовательской системой. Поэтому весь интерфейс работы с процессами был не сильно разработан, как в *unix системах. В Виндовсе есть свой интерфейс, например TaskMenedger. Но там надо клоцать мышкой вручную. Что в твоей задаче, я думаю, не приемлемо.

А вот насчет "Каждые десять минут" я думаю можно обойтись средствами самой винды. Есть планировшик задач.
« Последнее редактирование: 15-07-2006 07:13 от Finch » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Chuda
Гость
« Ответ #6 : 16-07-2006 13:11 » 

ну а есть в винде какие-нибудь аналоги баш-скриптов? Вообще, как в ней работать?
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #7 : 16-07-2006 13:16 » 

Есть аналог консоли. И все скрипты записываются в .bat файлы. Примерный список команд можно посмотреть, набрав в консоле команду help. Чтобы зайти в консоль, нужно Start->Run набрать cmd (или command).

Из консоли можно запускать, как и внутрение так и внешние команды. Все запускаемые файлы считаются внешними командами. Каталоги разделяются обратным слэшэм \.
« Последнее редактирование: 16-07-2006 13:25 от Finch » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #8 : 16-07-2006 17:31 » 

Поправочка: это не аналог, а немного расширенный, по сравнению с command.com, язык. Пробовал писать - убого.
Большего толка можно добиться посредством VB-скриптов.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Chuda
Гость
« Ответ #9 : 17-07-2006 12:31 » 

ну а процессы неужто там не убиваются по-человечески?
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #10 : 17-07-2006 16:08 » 

Chuda, ты help пробовала набирать? По каждой интересующей команде так же. Напр.: help for . У них, кстати, for используется для всякой мутатени, совсем не связанной с циклами. Напр., получение N-го слова в строке.
А с убийством у них туго - не развит язык.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Chuda
Гость
« Ответ #11 : 17-07-2006 19:07 » 

ничего я не пробовала, у меня нет винды. В лучшем случае могу заниматься кросскомпиляцией и запускать это добро под вайном.
а то, что простейшая операция под "самой удобной ОС" оказывается фактически невыполнимой, расстраивает. И сильно расстраивает.
И вообще, лучше молчу, а не то матом ругаться буду от избытка чуйств.
Записан
sss
Специалист

ru
Offline Offline

« Ответ #12 : 18-07-2006 00:43 » 

Интересно, никто не знает про системную утилиту taskkill ! Как все таки в виндах всё сложно и коряво...
Записан

while (8==8)
Chuda
Гость
« Ответ #13 : 18-07-2006 12:09 » 

sss, расскажи, что это за утилита, и где о ней можно почитать, и как её использовать.
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #14 : 18-07-2006 12:54 » 

sss, а часом не приведет ли taskkill к появлению окна "программа не отвечает"?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #15 : 18-07-2006 13:11 » 

Chuda,
Код:
C:\>taskkill /?

TASKKILL [/S <система> [/U <пользователь> [/P [<пароль>]]]]
         { [/FI <фильтр>] [/PID <процесс> | /IM <образ>] } [/F] [/T]

Описание:
  Эта команда позволяет завершить один или несколько процессов.
  Процесс может быть завершен по имени образа или по идентификатору процесса.

Список параметров:
   /S   <система>                  Подключаемый удаленный компьютер.

   /U   [<домен>\]<пользователь>  Пользовательский контекст, в котором
                                   должна выполняться эта команда.

   /P   <пароль>                   Пароль для этого пользовательского контекста.

                                   Запрашивает пароль, если он не задан.

   /F                              Принудительное завершение процесса


   /FI  <фильтр>                   Отображение задач, отвечающих
                                   указанному в фильтре критерию.

   /PID <процесс>                  Идентификатор процесса, который требуется
                                   завершить.

   /IM  <образ>                    Имя образа процесса, который требуется
                                   завершить. Для указания всех процессов
                                   можно использовать символ шаблона '*'.

   /T                              Завершение указанного процесса
                                   и всех его дочерних процессов.

   /?                              Вывод справки по использованию.

Фильтры:
    Имя фильтра   Допустимые операторы           Допустимые значения
    -----------   --------------------           -------------------
    STATUS        eq, ne                    RUNNING | NOT RESPONDING
    IMAGENAME     eq, ne                    Имя образа
    PID           eq, ne, gt, lt, ge, le    Значение PID
    SESSION       eq, ne, gt, lt, ge, le    Номер сессии
    CPUTIME       eq, ne, gt, lt, ge, le    Время CPU в формате
                                            hh:mm:ss.
                                            hh - часы,
                                            mm - минуты, ss - секунды
    MEMUSAGE      eq, ne, gt, lt, ge, le    Использование памяти в КБ
    USERNAME      eq, ne                    Имя пользователя в формате
                                            [<домен>\]<пользователь>
    MODULES       eq, ne                    Имя DLL
    SERVICES      eq, ne                    Имя службы
    WINDOWTITLE   eq, ne                    Заголовок окна

Примечание: Символ '*' для параметра /IM применим только совместно с фильтрами.

Примечание: Завершение удаленных процессов всегда будет принудительным,
            независимо от того, был ли использован параметр /F или нет.

Примеры:
  TASKKILL /S <система> /F /IM notepad.exe /T
  TASKKILL /PID 1230 /PID 1241 /PID 1253 /T
  TASKKILL /F /IM notepad.exe /IM mspaint.exe
  TASKKILL /F /FI "PID ge 1000" /FI "WINDOWTITLE ne untitle*"
  TASKKILL /F /FI "USERNAME eq NT AUTHORITY\SYSTEM" /IM notepad.exe
  TASKKILL /S <система> /U <домен>\<пользователь> /FI "USERNAME ne NT*" /IM *
  TASKKILL /S <система> /U <пользователь> /P <пароль> /FI "IMAGENAME eq note*"
« Последнее редактирование: 19-12-2007 19:20 от Алексей1153++ » Записан

Удачного всем кодинга! -=x[PooH]x=-
Chuda
Гость
« Ответ #16 : 18-07-2006 23:08 » 

Спасибо, буду попробовать. А всё же, где в Windows аналог кронтаба?
Записан
PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #17 : 19-07-2006 04:41 » 

ну как такового кронтаба у нее нет, есть програмка "менеджер задач", а также есть AT
Код:
C:\>at /?
Команда AT предназначена для запуска команд и программ в указанное время
по определенным дням. Для использования команды AT необходимо, чтобы была
запущена служба расписаний.

AT [\\имя_компьютера] [ [код] [/DELETE] | /DELETE [/YES]]
AT [\\имя_компьютера] время [/INTERACTIVE]
    [ /EVERY:день[,...] | /NEXT:день[,...]] "команда"

\\имя_компьютера   Имя удаленного компьютера. Если этот параметр опущен,
                   используется локальный компьютер.
код                Порядковый номер запланированной задачи.
/delete            Отмена запланированной задачи. Если код задачи опущен,
                   отменяются все задачи, запланированные для указанного
                   компьютера.
/yes               Отмена запроса на подтверждение при отмене всех
                   запланированных задач.
время              Время запуска команды.
/interactive       Разрешение взаимодействия задачи с пользователем,
                   работающим на компьютере во время запуска задачи.
/every:день[,...]  Запуск задачи осуществляется по указанным дням недели или
                   месяца. Если дата опущена, используется текущий день
                   месяца.
/next:день[,...]   Задача будет запущена в следующий указанный день недели
                   (например в следующий четверг). Если дата опущена,
                   используется текущий день месяца.
"команда"          Команда Windows NT или имя пакетного файла.
Записан

Удачного всем кодинга! -=x[PooH]x=-
sss
Специалист

ru
Offline Offline

« Ответ #18 : 19-07-2006 07:39 » 

sss, а часом не приведет ли taskkill к появлению окна "программа не отвечает"?

Не разу не видел. Я taskkill убиваю зависшие службы (не все конечно). И еще помогает при ловле сопротивляющихся вирусов.
Записан

while (8==8)
IRP
Постоялец

ua
Offline Offline

« Ответ #19 : 19-07-2006 09:28 » 

>> 1. как же в виндах всё сложно и коряво
Дорогая Chuda прежде чем так утверждать - я бы сначала познакомился хоть немного с тем как работает Windows. Такие заявления говорят лишь о Вашем незнании работы ОС.
Если нет привычных аналогов с Unix истемами - это совсем не означает что все КОРЯВО!!!

>> 2. ну а процессы неужто там не убиваются по-человечески?
Что значит "убиватьая по человечески?" Ваши действия уже не "человеческие" т.к. процесс был запушен, а Вы хотите его завершить без его ведома!

И вообще прежде чем браться за подобные задачи под абсолютно неизученой ОС, познакомтесь с ее элементарными принципами работы, например почитайте Джефри Рихтера.
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #20 : 19-07-2006 09:38 » 

Цитата: IRP
И вообще прежде чем браться за подобные задачи под абсолютно неизученой ОС, познакомтесь с ее элементарными принципами работы, например почитайте Джефри Рихтера.
Это, пожалуй, слишком сильное предположение. Улыбаюсь Я тоже про taskkill и tasklist узнал только вчера за 5 минут до поста sss, но из этого совсем не следует, что я не знал о возможности убийства процессов в Windows. Улыбаюсь

P.S. Вообще-то в UNIX kill занимается не только и не столько убийством, сколько посылкой разных сигналов (в том числе и KILL)... Просто название не очень удачное. А вот taskkill в Windows занимается именно убийством процессом и ничем другим (хотя тоже с помощью посылки сигналов - пришлось MS воспользоваться этой идеей в WinNT, ибо иного лучшего вроде бы пока не придумали).
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
IRP
Постоялец

ua
Offline Offline

« Ответ #21 : 19-07-2006 09:45 » 

Цитата
Это, пожалуй, слишком сильное предположение. Улыбаюсь Я тоже про taskkill и tasklist узнал только вчера за 5 минут до поста sss, но из этого совсем не следует, что я не знал о возможности убийства процессов в Windows.

Это не к тому было сказано. Я сказано к тому, что Барышне прежде чем ставить перед самой такие задачи - как убийство процессов в неизвестной для нее системе, следует познакомится с тем как же всетаки это работает, а уж потом думать о реализации, будь то taskkill или TerminateProcess!!!
Записан
sss
Специалист

ru
Offline Offline

« Ответ #22 : 20-07-2006 01:13 » 

Wanderlust forever!
« Последнее редактирование: 20-07-2006 01:27 от sss » Записан

while (8==8)
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #23 : 24-05-2007 05:18 » 

Chuda, есть аналог крона, не разу не пользовался, но он есть
Start->Control Panel->Scheduled Tasks

если винда старше Win2k, то для убийства используй taskkill я всегда им пользуюсь, если нужно прибить несколько зависших окон.
Записан

Странно всё это....
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines