Windows эквивалент для Linux "экран" или другая альтернатива? - PullRequest
13 голосов
/ 19 февраля 2011

Я ищу способ управления программами в среде Windows.

Я бы предпочел, чтобы это было немного похоже на программное обеспечение Linux "screen".

Причина моего поиска в том, что мне нужно запустить программу (в Windows) сидентификатор, так что позже я смогу закрыть эту конкретную программу, не закрывая ничего другого, даже если фактическая программа (файл .exe) выполняется несколько раз.Так есть ли в любом случае, я могу это назвать?

Я сейчас использую в Linux следующее:

$ screen <params> <id> ./softwareprogram

И тогда я знаю, что всегда могу найти его по его ID:)

Это внешняя программа, котораязакрывает или запускает стороннюю программу.

Моя программа написана на C ++, если это имеет какое-то значение.

Редактировать: Разве я не могу самостоятельно выбрать идентификатор?Как запустить программу с определенным именем?Также как мне убить процесс, указав имя?

Ответы [ 3 ]

3 голосов
/ 15 января 2012

В настоящее время я не верю, что есть собственный эквивалент экрана.Cygwin содержит реализацию экрана, но он идет с накладными расходами Cygwin.Проблема заключается в том, что операционные системы Windows и Posix реализуют консоли совершенно по-другому.Windows не поддерживает многие функции tty, которые являются частью среды POSIX.При этом, возможно, можно написать минимальную реализацию функциональности в экранной утилите, используя вызовы API: AttachConsole и FreeConsole .Однако мне пришлось бы провести немного больше исследований по этому вопросу.

1 голос
/ 19 февраля 2011

Когда вы запускаете программу, вы можете получить идентификатор процесса даже в Windows. Позже вы можете использовать этот идентификатор процесса, чтобы снова убить программу.

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

Вместо реестра вы также можете использовать базу данных или папку с файлами, где ключ (ваш идентификатор) - это имя файла, а pid находится внутри каждого файла

0 голосов
/ 19 февраля 2011

Хотя я понятия не имею, что делает команда linux screen, почему бы вам просто не использовать дескриптор процесса, полученный из CreateProcess?

Вы также получаете идентификатор процесса, но он действителен только при наличии открытых дескрипторов этого процесса.

Параметр lpProcessInformation будет содержать как идентификатор процесса, так и дескриптор процесса.

...