|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Присвоение pid'a процессу при запуске. |
|
CMD/BAT - [решено] Присвоение pid'a процессу при запуске.
|
Старожил Сообщения: 162 |
Профиль | Отправить PM | Цитировать Можно ли при запуске программы через командную строку при помощи start присваевать PID этому процессу?
А дело вот в чем: Есть несколько одинаковых файлов(приложений), названия которых тоже совпадают. С запуском проблем нет. А вот с прекращением их работы есть. По названию их не остановить, т.к. 3 одинаковых названия. А по PID - его надо каждый раз узнавать. Нельзя ли разу присваевать этот пид процессу? |
|
Отправлено: 23:22, 06-10-2012 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Паркан:
Можно получать PID при запуске. Затем использовать его при завершении процесса. Рассказывайте детали: что за приложения, как и когда запускаются, как и когда завершаются. |
|
Отправлено: 03:41, 07-10-2012 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 162
|
Профиль | Отправить 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
|
Профиль | Отправить 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 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 Что и как Вы с полученным 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 |
Отправлено: 01:46, 08-10-2012 | #4 |
Старожил Сообщения: 162
|
Профиль | Отправить PM | Цитировать Цитата Iska:
Цитата Iska:
Цитата Iska:
Ну вот дальше проблема: как выключить? В cmd.exe можно использовать PID процесса. В php сформировать функцию выключения организовать не проблема. Но проблема в том, что я не знаю какой именно сервер вырубить. Приложение способно работать даже когда клиент покинет сайт, т.е. в качестве мини сервера, разве что если он не упадет сам. Но иногда клиенту может понадобиться перезагрузка его сервера - вот тогда то и возникают, как вы понимаете, проблемы с выбором сервера, который надо выключить. |
||||
Отправлено: 00:01, 09-10-2012 | #5 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Паркан, если пользователю позволено иметь запущенным только один процесс (от которого и нужен PID) — то всё достаточно просто: привязывайте к паре логин/пароль и полученный PID.
Цитата Паркан:
|
|
Отправлено: 03:31, 09-10-2012 | #6 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|