Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Присвоение pid'a процессу при запуске.

Ответить
Настройки темы
CMD/BAT - [решено] Присвоение pid'a процессу при запуске.

Старожил


Сообщения: 162
Благодарности: 2

Профиль | Отправить PM | Цитировать


Можно ли при запуске программы через командную строку при помощи start присваевать PID этому процессу?
А дело вот в чем: Есть несколько одинаковых файлов(приложений), названия которых тоже совпадают. С запуском проблем нет.
А вот с прекращением их работы есть. По названию их не остановить, т.к. 3 одинаковых названия. А по PID - его надо каждый раз узнавать.
Нельзя ли разу присваевать этот пид процессу?

Отправлено: 23:22, 06-10-2012

 

Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата Паркан:
Можно ли при запуске программы через командную строку при помощи start присваевать PID этому процессу? »
Нет.

Можно получать PID при запуске. Затем использовать его при завершении процесса. Рассказывайте детали: что за приложения, как и когда запускаются, как и когда завершаются.

Отправлено: 03:41, 07-10-2012 | #2



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

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Старожил


Сообщения: 162
Благодарности: 2

Профиль | Отправить PM | Цитировать


Типичное exe приложение серверного типа.
Запускаю при помощи start. Завершение через taskkill при помощи PID.

А вообе суть такая: Есть многопользовательский сайт на php,где в интерфейсе кнопки: старт, стоп.
При клике Старт формируется файл start.cmd, который содержит путь к запускаемому файлу, и сам запус этого файла, после exit и cmd.exe прекращает работу. Все было нормально, пока работало одно приложение. Но при запуске 2 и более уже по названию не отключить. Вот, хотел бы реализовать таким же образом его остановку: при клике на Стоп сайт формирует файл stop.exe, где содержит остановку процесса по PID.
p.s. Если получать Pid при запуске возникает еще одна проблема: как cmd.exe отправить php данные о pid'e, что бы тот знал какой именно PID принадлежит пользователю.

Отправлено: 22:37, 07-10-2012 | #3


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Паркан, сожалею, но с php помочь Вам не смогу. Насколько я понимаю, нажимают кнопки на клиенте, а приложение должно запускаться и останавливаться на сервере, так? Сеть глобальная или локальная? Как и где предполагаете хранить PID? Как планируется осуществлять идентификацию клиента, как — соотносить его с уже запущенным приложением (если, например, клиент просто запустит приложение и, не остановив его, выйдет; снова зайдёт, запустит и выйдет и т.д.)?

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

Общий принцип запуска приложения и получения его PID (на WSH):
Код: Выделить весь код
Option Explicit

Dim objWshShell
Dim objWshExec

Set objWshShell = WScript.CreateObject("WScript.Shell")
Set objWshExec  = objWshShell.Exec("notepad.exe")

WScript.Echo objWshExec.ProcessID

Set objWshExec  = Nothing
Set objWshShell = Nothing

WScript.Quit 0
Или (специально избыточный вариант для «особых» языков, типа LISP и т.п.):
Код: Выделить весь код
Option Explicit

Dim strComputer

Dim objSWbemLocator
Dim objSWbemServicesEx
Dim objSWbemObjectEx
Dim objSWbemMethod
Dim objSWbemObjectEx_InParameters
Dim objSWbemObjectEx_OutParameters

strComputer = "."

Set objSWbemLocator                = WScript.CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServicesEx             = objSWbemLocator.ConnectServer(strComputer, "root\cimv2")
Set objSWbemObjectEx               = objSWbemServicesEx.Get("Win32_Process")
Set objSWbemMethod                 = objSWbemObjectEx.Methods_.Item("Create")
Set objSWbemObjectEx_InParameters  = objSWbemMethod.InParameters.SpawnInstance_()

objSWbemObjectEx_InParameters.Properties_.Item("CommandLine").Value = "notepad.exe"

Set objSWbemObjectEx_OutParameters = objSWbemObjectEx.ExecMethod_(objSWbemMethod.Name, objSWbemObjectEx_InParameters)

WScript.Echo objSWbemObjectEx_OutParameters.Properties_.Item("ProcessID").Value

Set objSWbemObjectEx_OutParameters = Nothing
Set objSWbemObjectEx_InParameters  = Nothing
Set objSWbemMethod                 = Nothing
Set objSWbemObjectEx               = Nothing
Set objSWbemServicesEx             = Nothing
Set objSWbemLocator                = Nothing

WScript.Quit 0
Имею в виду, что Вы переведёте WSH на php по типу:
Код: Выделить весь код
…
$oSWbemLocator = new COM("WbemScripting.SWbemLocator");
…
Что и как Вы с полученным PID будете делать дальше — зависит от ответов на заданные в начале поста вопросы.

Завершение процесса по известному PID, например, переданному единственным аргументом:
Код: Выделить весь код
Option Explicit

Dim strPID
Dim strComputer

Dim objSWbemLocator
Dim objSWbemServicesEx
Dim objSWbemObjectEx
Dim objSWbemObjectEx_InParameters


strPID = WScript.Arguments.Item(0)
strComputer = "."

Set objSWbemLocator                = WScript.CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServicesEx             = objSWbemLocator.ConnectServer(strComputer, "root\cimv2")
Set objSWbemObjectEx               = objSWbemServicesEx.Get("Win32_Process.Handle='" & strPID & "'")
Set objSWbemObjectEx_InParameters  = objSWbemObjectEx.Methods_.Item("Terminate").InParameters.SpawnInstance_()

objSWbemObjectEx.ExecMethod_ "Terminate", objSWbemObjectEx_InParameters

Set objSWbemObjectEx_InParameters  = Nothing
Set objSWbemObjectEx               = Nothing
Set objSWbemServicesEx             = Nothing
Set objSWbemLocator                = Nothing

WScript.Quit 0
Не думаю, что изложенное Вам особо пригодится. Рекомендуется сначала ответить для себя на вопросы, изложенные в начале поста, затем делать реализацию на php.

Отправлено: 01:46, 08-10-2012 | #4


Старожил


Сообщения: 162
Благодарности: 2

Профиль | Отправить PM | Цитировать


Цитата Iska:
Сеть глобальная или локальная? »
Глобальная.
Цитата Iska:
Как и где предполагаете хранить PID? »
Есть база данных mysql. И поля, логин, пасс, и т.д., в том числе pid.
Цитата Iska:
Как планируется осуществлять идентификацию клиента, как — соотносить его с уже запущенным приложением (если, например, клиент просто запустит приложение и, не остановив его, выйдет; снова зайдёт, запустит и выйдет и т.д.)? »
Идентификация на сайте - логин, пароль. После чего из БД извлекается вся информация о клиенте, так же и порт его сервера. То есть структура папок серверов для пользователей ../server/port/сами файлы сервера.С запуском сервера проблем нету. Как через php, так и через cmd.exe. А именно php формирует файл start.cmd, в котором он изменяет порт сервера. И уже ком.строка переходит в нужную папку, запускает приложение и завершает свою работу. У пользователя пишет - сервер запущен, все ок, это работает.
Ну вот дальше проблема: как выключить? В cmd.exe можно использовать PID процесса. В php сформировать функцию выключения организовать не проблема. Но проблема в том, что я не знаю какой именно сервер вырубить.
Приложение способно работать даже когда клиент покинет сайт, т.е. в качестве мини сервера, разве что если он не упадет сам. Но иногда клиенту может понадобиться перезагрузка его сервера - вот тогда то и возникают, как вы понимаете, проблемы с выбором сервера, который надо выключить.

Отправлено: 00:01, 09-10-2012 | #5


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Паркан, если пользователю позволено иметь запущенным только один процесс (от которого и нужен PID) — то всё достаточно просто: привязывайте к паре логин/пароль и полученный PID.

Цитата Паркан:
С запуском сервера проблем нету. Как через php, так и через cmd.exe. А именно php формирует файл start.cmd, в котором он изменяет порт сервера. И уже ком.строка переходит в нужную папку, запускает приложение и завершает свою работу. У пользователя пишет - сервер запущен, все ок, это работает. »
Зачем нужен промежуточный «start.cmd»? Почему не делать это просто из php?

Отправлено: 03:31, 09-10-2012 | #6



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Присвоение pid'a процессу при запуске.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
2008 R2 - Проблема доступа к процессу 4rward Windows Server 2008/2008 R2 1 26-12-2011 14:50
Разное - Как ограничить память процессу ? kpripper Microsoft Windows 7 2 13-11-2011 00:19
C/C++ - Присвоение функции значения mrcnn Программирование и базы данных 4 07-11-2008 08:26
Вопрос по процессу system 12341234 Программное обеспечение Windows 15 11-12-2007 22:02
XP. Присвоение IP сетевому интерфейсу Stesh Хочу все знать 2 02-10-2006 18:43




 
Переход