C/C++

Как запустить процессы, чтобы они работали пока программа не закрыта? с++

Написал программу на с++, которая в цикле выполняет консольные команды, по мере работы процессы выполнения команд открываются и закрываются. Как сделать чтобы они работали на протяжении работы программы? Скорее всего именно из-за постоянного перезапуска подлагивает компьютер
Чуть менее чем никак. Если процесс хочет завершиться, он это сделает и ты никак ему не сможешь помешать.
На самом деле способ есть. Это самое "желание" процесса закрыться можно перехватить при помощи системного крюка и поставить основную нить процесса на паузу. Только оно тебе туда не поможет - ну, будет у тебя куча подвисших процессов, толку-то...
Но! Нафига ж ты их вообще запискаешь? На C++ можно написать что угодно. Если там у тебя не какие-то космические программы запускаются, просто реализуй их функционал самостоятельно и все будет ехать плавненько.
Олег Переплёткин
Олег Переплёткин
59 871
Лучший ответ
Александр Панов Просто такая ситуация, что код выполняет команды из cmd, а другой реализации не нашёл
К сожалению из вашего вопроса не совсем понятно, чего вы хотите добиться.
Если вам нужно, чтобы ваши процессы после запуска выполнялись параллельно с запустившей их программой и она не дожидалась их завершения то это возможно, но реализация зависит от ОС. В нормальных операционных системах есть функция fork() которая порождает дочерний процесс в виде копии основного. Если после fork выполнить exec то этот дочерний процесс будет замещен новым и он будет выполняться параллельно с родительским. После завершения выполнения дочернего процесса остается специальная структура данных с результатами работы. Родительский процесс должен вызвать функцию из семейства wait для того, чтобы извлечь данные из этой структуры (ее еще называют зомби-процессом) и освободить ресурсы. Функция system, которой тут многие любят пользоваться, под капотом скрывает эти стадии, а так как она использует блокирующуюся версию wait то и выполнение родительского процесса приостанавливается до тех пор, пока не завершится процесс потомок. Чтобы такого не было, надо использовать waitpid примерно таким образом: waitpid( -1, &status, WNOHANG )
В Windows функции fork нет, поэтому вместо одной строчки вам придется написать страницу кода, чтобы затем выполнить функцию из семейства CreateProcess
А перед этим прочитать много-много страниц документации, чтобы понять особенности жизненного цикла процессов в этих "чудесных" ОС.
Если правильно понял, то почему-бы не заюзать цикл в цикле, или например плодить дочерние процессы, рекурсия же наконец на сколько памяти хватит.
RM
Roman Makhnev
123