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

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

ru
Offline Offline

« Ответ #30 : 18-09-2003 07:31 » 

NetRaider,  мне кажется ты пытаешься меня убедить что я не понимаю ни что такое драйвер, ни что такое сервис. Да пожалуйста- считай как хочешь. Скоро сам поймешь.
Драйвер и сервис- разные вещи и сервисы не работают в режиме ядра.

Цитата

Драйвер это не сервис, работающий в режиме ядра, тогда как сервис работающий в режиме ядра - драйвер.


Можешь дальше обсуждать мои посты, если ты не в состоянии их понять- это твоя проблема. Фраза "Сервис, работающий в кернел моде называется драйвер" была применена потому, что ее применил Grom, а я имел в виду, что такое словосочетание надо обзывать драйвер.
И вобще не считаю нужным вступать в дискуссию, где мне объясняют понятия драйвер и сервис, и к тому же утверждают, что драйвер- это сервис режима ядра!
Записан
NetRaider
Гость
« Ответ #31 : 18-09-2003 07:59 » 

Хорошо, заканчиваем, только посмотри пожалуйста описание функции CreateService, создающей службу(!), в частности 5-й параметр.

Цитата

и к тому же утверждают, что драйвер- это сервис режима ядра!

Я этого не говорил.
Записан
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #32 : 18-09-2003 08:03 » 

Цитата

Хорошо, заканчиваем, только посмотри пожалуйста описание функции CreateService, создающей службу(!), в частности 5-й параметр.


Ага посмотрю, особенно с учетом того, что я ее дебагил. Кстати название ф-ции CreateFile тебя никогда не смущало?
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #33 : 18-09-2003 09:15 » 

Сервисы и программы для меня были разными вещами...
Мало программистов да и задач не так много, которые бы писались сервисами.

Основу всегда составляет обычное приложение...

Насчет Wait.... конечно это объект события в этом никто и не сомневался, но по устройству - это тот же мессейдж, только с разными структурами обработки и очередей.

И в общем то спор скорее неверен, потому, что мы все знаем явно как это все работает , только я понимаю так, что если есть что-то системное очень - редко употредляемое, то это одно, когда говорим о стандартной аппликации - зачем морочить себе голову, поставил окно и вперед - пусть его не будет видно - но работать оно будет.

Там тогда и проблем с сообщениями тоже не будет.

Насчет некорректности - ты знаешь как люди разобравшиеся в потоках начинают писать программы, на каждую вещь - поток.
Тю.е. неопытность и употребление средств не по делу и есть некорректность.
Так писать можно и это работает и есть куча таких программ. Но для конкретики - это некорректно.

Поясню на примере 100 строкового сервера.

Обычный сервер не имеет процессов под каждую задачу, типа прием 1 - процесс обработка данных - другой, которые будут как демоны в никсах сидеть и работать.
Большинство видимых мной серверов - поточные.
Поток кушает меньше времени на старт, меньше ресурсов и организуется проще.

Его можно динамически запускать и тормозить - с ним связь внутри адрессного пространства - в общем все легче.
Поэтому строится обычная GUI апликация к которой присоединяют кучу потоков.
Обмен установками - даже если это другая апликация, происходит через конфигурационные записи в файлах или в реджистри.

Метод тобой описанный - правомерен, когда речь идет о программах , запускаемых до появления GUI интерфейса или сервисов типа DHCP да и то не уверен, что DHCP не драйвер сервис.

Это мои мысли - отсюда слово некорректность - а вовсе не попытка доказать свою глупость или осведомленность Улыбаюсь
Записан

А птичку нашу прошу не обижать!!!
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #34 : 18-09-2003 09:53 » 

Цитата

поставил окно и вперед - пусть его не будет видно - но работать оно будет.


Вот этого я не понимаю. Сварганив окно в сервисе, ты делаешь супер ошибку!. Потом я не понимаю, зачем делать окно, если можно без него, причем выйдет проще. Надо же руководствоваться методом Keep it simple, а не строить монстров с окнами скрытыми. Для меня скрытое окно- это недостаток программы, так как есть много других лучших способов для организации обмена. Неизвестно сколько дыр в своей проге ты наделаешь этими окнами, а уж об уродливости такого решения я умолчу(UNIX'дов на вас нету!).

Цитата

Обычный сервер не имеет процессов под каждую задачу


Вобще то процесс это исполняемый файл. То есть чтобы сделать процесс нужен исполняемый файл. Нормальные программы обычно находятся в одном исполняемом файле. посему и процесс один. Две программы- два процесса.

Цитата

Большинство видимых мной серверов - поточные.


А я скажу так- все видимые мной программы поточные, так как многопроцессных программ не бывает, одна программа- один процесс. Объясни мысль, с чего это ты стал противопоставлять потоки и процессы? Потоки одно, процессы- другое. Что это ты их сравниваешь. В Windows это абсолютно некорректно, в UNIX еще можно их сравнивать, так как организованы они одинаково(только у потоков память общая, за счет общей структуры описания памяти), в Windows нельзя сравнивать- один без другого не существует, по отдельности они существовать не могут. Хотя я расмматриваю возможность создания секции из какого-то левого файла, созданного самим процессом, и вызова для нее ZwCreateProcess, но это уже хакерство какое-то.

Цитата

Поток кушает меньше времени на старт, меньше ресурсов и организуется проще.


А с чем ты его сравниваешь? С процессом, ну так я про это уже сказал.

Цитата

Его можно динамически запускать и тормозить - с ним связь внутри адрессного пространства - в общем все легче.
Поэтому строится обычная GUI апликация к которой присоединяют кучу потоков.


С сервисом должна связываться программа управления, это всегда отдельная программа и тут нужно IPC использовать. Если ты хочешь их объединить в одном приложении- то это ошибка, да собственно такой сервис не примут, так как в нем нарушены все правила построения сервиса и он небезопасен.
За такой сервис с GUI надо руки отрывать, чтоб больше не писали.

Цитата

Обмен установками - даже если это другая апликация, происходит через конфигурационные записи в файлах или в реджистри.


Что-то не понял, зачем через реестр между программами общаться? А уж через файлы- ну тут я промолчу. Я шокирован!


Цитата

Метод тобой описанный - правомерен, когда речь идет о программах , запускаемых до появления GUI интерфейса или сервисов типа DHCP да и то не уверен, что DHCP не драйвер сервис.


Метод мной описанный верен всегда. Сервисы не должны взаимодействовать с GUI и рабочим столом, поэтому не надо говорить- ну это типа нафиг не нужно при наличии GUI. Сервис с GUI- это не сервис. DHCP- это юзер мод сервис, но у него для поддержки есть драйвер. Кстати еще есть COM сервера, их тоже предлагаешь с окнами скрытыми делать?
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #35 : 18-09-2003 11:28 » 

Погодь погодь...

Цитата

Сварганив окно в сервисе, ты делаешь супер ошибку!

С какой стати - если я хочу сделать дилог управления к сервису, я должен его делать отдельной программой???
Я поставлю его скрытым - посажук в трей иконку и по клику вызова меню буду открывать и конфигурировать его как это в Norton Antivirus сделано...

Что тут не то.

Цитата

Вобще то процесс это исполняемый файл.



Слав ты чего??? Процесс и исполняемый файл - это разные вещи, я вполне спокойно тебе приведупример из одного исполняемого файла подъема 10 процессов. И что ты тогда скажешь???
Процесс и поток отличаются тем, что поток является функцией, которая имеет стек но не имеет внутренних системных ресурсов отдельных от породившего его процесса.
А процесс полномерно получает виртуальную машину Винды. И попытка передать в него свой отцовский адрес будет неверна.

Есть еще куча разностей - но к исполняемым фалам оно никак не относится.

И я их не сравниваю, я отвечаю на ваш пример сервера как сервиса без окна, построенного на нескольких процессах, я же сказал, что и окно у него есть и вместо процессов там потоки...

Цитата

С сервисом должна связываться программа управления, это всегда отдельная программа и тут нужно IPC использовать. Если ты хочешь их объединить в одном приложении- то это ошибка, да собственно такой сервис не примут, так как в нем нарушены все правила построения сервиса и он небезопасен.
За такой сервис с GUI надо руки отрывать, чтоб больше не писали.

Абсолютно не согласен - даже говорить не буду почему - ен интересно. Я уже все сказал. Если сервис имеет все стандратные процедуры связи но при этом внутри имеет сосбтвенное окно настройки - это вполне правомерно.
ИМХО конечно.
Цитата

Что-то не понял, зачем через реестр между программами общаться? А уж через файлы- ну тут я промолчу.


Не стоит молчать Славик. ерез реестр общаются программы инсталляции, программы винды практически все имеют записи в регистр.
Сервис ftp "Serv-U" который я использовал у себя до недавнего времени является сервисной программой и имеет прогармму настройки сидящей в трее - при этом всю конфигурацию держит в регистре и в файлах, через них и обменивается установками.

Цитата

Сервисы не должны взаимодействовать с GUI и рабочим столом


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

А птичку нашу прошу не обижать!!!
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #36 : 18-09-2003 11:56 » 

Цитата

Процесс и исполняемый файл - это разные вещи, я вполне спокойно тебе приведупример из одного исполняемого файла подъема 10 процессов.


Ну приведи. Только не надо один и тот же исполняемый файл 10 раз запускать- это нам не в тему. Или ты не понял что имелось в виду.

Цитата

Они просто обязаны с ним взаимодейстовать. Иначе эта программа никому не будет нужна.
Даже сугубо системный сервис имеет интерфейс к административным функциям системы для управления 2-мя вещами минимум - запуска и останова с GUI интерфейсом. Он может не иметь внутри такой системы, но такие сервисы крайне редки и пишутся чаще всего вместе с ОС , а не отдельным заказом.


 Отлично  Отлично  Отлично  Отлично  Отлично  Отлично  Отлично  Отлично  Отлично  Отлично  Отлично  Отлично  Отлично  Отлично  Отлично  Отлично  Отлично  Отлично
Не вздумай это говорить где нибудь среди программеров сервисов, тебя просто пошлют. Объяснять тебе, что сервис не должен взаимодействовать с рабочим столом я устал, да больше и не хочу. Сделаю только дополнения- WinLogon.exe  создает три рабочих стола- WinLogon, Default, ScrteenSaver, терминальный сервер создает рабочий стол еще для каждого соединения.  Отсюда первый вопрос- куда будешь сообщение выводить(сервис то всех обслуживает)? Сразу вытекает второй вопрос- а ведь окну можно послать сообщение, а работает сервис под LocalSystem, с крутыми правами, то есть простой юзер сможет воздействовать на сервис и на всю систему. Таким образом сделав окно, твой сервис открыл себя для закрытия из под любого юзера, достаточно открыть TaskManager  на закладке Application прибить твой сервис путем посылки ему WM_CLOSE. Секюрити в графической подсистеме не применяется- тяжелое наследие Windows 3.1, нету SECURITY_ATRIBUTES у графических объектов, они к рабочему столу приписаны. Microsoft настоятельно не рекомендует делать сервис интерактивным, например из сервиса можно выкидывать MessageBox не делая его при этом интерактивным, думаешь его выкидывает сервис, который вызывал MessageBox,-ни фига, есть отдельный процесс, который получает запросы о показе MessageBox от других сервисов и показывает их от своего имени, поэтому этот MessageBox будет висеть если даже сервис, вызвавший MessageBox, будет остановлен!
Да кстати по поводу твоего мнения об интерактивности сервисов- все приложения, имеющие окна, отображаются на закладке Application Task Manager'а, найди там сервисы!
Блин, я в шоке. Так безапеляционно утверждать о том что графический интерфейс управления сервисом встроен в сервис, а не является отдельной программой. Ну блин, вобще. Приехали.

Цитата

Иначе эта программа никому не будет нужна


Быстро прибей у себя процессы всех сервисов- они же не нужны! Там нет GUI!
Записан
Diletant
Помогающий

de
Offline Offline

« Ответ #37 : 18-09-2003 12:09 » 

Цитата
Они просто обязаны с ним взаимодейстовать. Иначе эта программа никому не будет нужна.


Предлженный мною выше тупой TCP Сервер отнюдь не обязан иметь какой-либо GUI. А применений ему можно предложить кучу, от передачи новостей до  курса валют.

Цитата
С какой стати - если я хочу сделать дилог управления к сервису, я должен его делать отдельной программой???


С той стати, что конфигурационная программа отнюдь не должна выполняться на том же компьютере, что и основной процесс. Тем более сажать (к примеру) в в критичный ко времени сервис всю эту белиберду по отслеживанию положения курсора, Post/Send ..., по меньшей мере, неразумно.

PS. Ваше Величество, Вы по-моему на прицип пошли, и ради принципа иногда околесицу несете  Отлично
Записан
Release
Гость
« Ответ #38 : 18-09-2003 12:31 » 

Небольшая поправка к вопросу о принадлежнасти объектов ядра:

Объекты ядра принадлежат ядру (ни процесам и ни потокам и.т.д)
Вот собственно и всё  Улыбаюсь
Записан
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #39 : 18-09-2003 12:33 » 

Цитата

Небольшая поправка к вопросу о принадлежнасти объектов ядра:

Объекты ядра принадлежат ядру (ни процесам и ни потокам и.т.д)


Это ты к кому обращаешься? Кто сказал про пинадлежность объектов процессу?
Записан
Release
Гость
« Ответ #40 : 18-09-2003 12:52 » 

Цитата

Какие проблемы???
В любом случае есть возможность организации наследования - так как объекты ядра принадлежат не потокам а процессам.

Вот тебе ссылка как сделать MemoryMap объект наследуемым для дочернего процесса.
Записан
Release
Гость
« Ответ #41 : 18-09-2003 12:53 » 

Выходит, что сам Император ...
Записан
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #42 : 18-09-2003 12:57 » 

Цитата

Выходит, что сам Император


Он имел в виду описатели, но почему то написал объект, а таблица описателей принадлежит процессу.
Записан
Release
Гость
« Ответ #43 : 18-09-2003 13:03 » 

У Вас класный форум (я здесь впервые) - я обязательно зарегистрируюсь!
Спасибо !!!
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #44 : 18-09-2003 13:42 » 

Ладно хватит. Жаль
Все мои попытки что-то объяснить натыкаются на понимание моего спора как попытку щегольнуть важностью на этом форуме - больше не буду.
Тем более что мой ник и подпись к нему не имеют ничего общего с моим проф. опытом и знаниями. Жаль что это начинают уже использовать.   Так больше нельзя...

Поясню еще раз
Славик - для того что ыб запстить 10 раз процесс с одного бинарника достаточно написать 10 раз функцию CreateProcess - и как тогда будет выглядеть твоя фраза по поводу соответствия одного бинарника одному процессу - если их будет 10 к 1  :?:

Прикол по поводу WM_CLOSE меня вообще добил.
Славик, мне достаточно перехватить внутри процесса WM_CLOSE дабы юзер не мог бы меня убить простым способом - типа посылки закрытия процесса. Кроме того - я могу запртеить пермишн для завершения - если уж на то пошло, дабы имела на это правво только система а не кто-то иной - кстати ты противоречишь себе - ведь таск менеджер не может прибить системные процессы не из-за отсутствия WM_CLOSE в них, а именно из-за их системности.

По поводу сервисов - я что говорил что у ВСЕХ сервисов есть GUI???
Я сказал , что системные сервисы пишутся вместе с системой, а сервера-  о которых шла речь в примере, не являются таковыми и вполне имеют GUI. Примером является сервис NortonAntivirus который имеет встроенный GUI.

По поводу наличия окон во вкладке Applications - Славик - запусти приложения MFC сделай окну HIDE и попытайся найти это окно в Applications вкладке - полный бред Славик - его там не будет - это конечно скажет тебе, что программа превратилась в сервис и не имеет GUI верно - такое ты пишешь уже в третий раз и игнорируешь ответы на сосбтвенный бред...  :?:  Я шокирован!


По поводу принадлежности объектов ядра - про них лежат три моих статьи - естественно имелось ввиду принадлежность описателей.

----------------------------------------------------

А теперь по существу, дабы прекратить извращенные попытки приписать мне понятия которые я не писал. или извртить то что написано.

1. Сервис системы. а так же сервисы без GUI существуют.
2. Они как задачи встречаются крайне редко, если ты не пишешь свою ОС.
3. Любой сервис - если он не сетевой не должен иметь доступа по сети - ибо тогда всегда есть возможность дистанционного над ним контроля от удаленной машины, а это опасно.
4. Сервис без GUI специфическая апликация, работа которой связана с очень узким кругом задач и не имеет отношение к теме в которой мы спорим, где просто спросили как из СТАНДАРТНОЙ программы передать процессу дочернему данные.
5. Я могу сделать программу которую никак нельзя прибить - даже из таск менеджера, при этом в ней будет и окно и прием сообщений - это даже не буду описывать - ибо нефиг.
--------------
Общие пункты.
1. Большая просьба не давать мне советов где и что говорить!
2. Просьба споры со мной не приписывать к моему нику и стебной подписи, так как факт того, что управление форумом и идея сайта принадлежат мне не имеют никакой связи с профессиональным уровнем участников спора. В этом случае я выступаю только как ряовой участник форума, и более никак.
3. Очень большая просьба не опускать в споре те ответы . которые были получены от оппонента и  не вписываются в концепцию ответа как:



Цитата

Цитата

Что-то не понял, зачем через реестр между программами общаться? А уж через файлы- ну тут я промолчу.

 


Не стоит молчать Славик. ерез реестр общаются программы инсталляции, программы винды практически все имеют записи в регистр.
Сервис ftp "Serv-U" который я использовал у себя до недавнего времени является сервисной программой и имеет прогармму настройки сидящей в трее - при этом всю конфигурацию держит в регистре и в файлах, через них и обменивается установками.

Т.е. сморозив глупость замечать ее 100% необходимо. По крайней мере я так делаю всегда.

------------------------------------------
Мелкие недочеты

Цитата

Предлженный мною выше тупой TCP Сервер отнюдь не обязан иметь какой-либо GUI. А применений ему можно предложить кучу, от передачи новостей до курса валют.


Циата до этого моя

Цитата

Даже сугубо системный сервис имеет интерфейс к административным функциям системы для управления 2-мя вещами минимум - запуска и останова с GUI интерфейсом. Он может не иметь внутри такой системы, но такие сервисы крайне редки и пишутся чаще всего вместе с ОС , а не отдельным заказом.


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

(Кстати Славик - это не системный сервис, так что если его отключить система не упадет)...
Цитата

С той стати, что конфигурационная программа отнюдь не должна выполняться на том же компьютере, что и основной процесс.



А если доступ изначально должен быть только с того же копьютера хотя бы с точки зрения безопасности Не понял

В общем я тут пмогу еще пол часа писать - но не вижу смысла, на наезды и подколы больше не отвечаю.
Записан

А птичку нашу прошу не обижать!!!
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #45 : 18-09-2003 13:50 » 

Цитата

Я могу сделать программу которую никак нельзя прибить - даже из таск менеджера, при этом в ней будет и окно и прием сообщений - это даже не буду описывать - ибо нефиг.

Тут я несколько  погорячился - нельзя будет прибить послав WM_CLOSE сам же таск менеджер может прибить все. Кроме того - на что у него нет прав а простую апликацию такими провами наградить просто нельзя по моему - тут я не помню.
Записан

А птичку нашу прошу не обижать!!!
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #46 : 18-09-2003 15:31 » 

И вообще - если честно - я хотел было стереть все что написал - ибо настрой был отвратительный, я если честно, обиделся.

Но решил не стирать - а просто дописать, что больше в споры я вступать не буду во избежании таких вот упреков.

А так же не буду говорить о своих методах построения апликации. У меня было несколько случаев неприятных последствий создания такого рода программ с двумя потоками, которые взаимодействовали друг с другом, первый еще во времена DDE на 98 винде.
И поэтому я считал и буду считать создание таких сервисов некорректными в плане построения приложения.
Везде где нужен минимальный GUI и нет необходимости в дистанционном управлении , как это происходит в приложениях хранителях версий и сетевых сервисах, всегда обязательно буду советовать делать GUI встроенное в апликацию и использовать не процесс без GUI для работы демона.
Записан

А птичку нашу прошу не обижать!!!
NetRaider
Гость
« Ответ #47 : 19-09-2003 22:34 » new

to SlavaI:

Разобрался я со службами и драйверами...
Признаю, что был неправ. Виной этому отчасти полужило то, что в msdn и microsoft.com содержится противоречивая информация и термин service применяется во многих контекстах.

Спасибо за дискуссию Ага
Записан
Страниц: 1 [2]  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines