|
|
|
Аналог CreateProcess()18.04.2018, 11:40. Показов 8573. Ответов 49
Метки нет (Все метки)
Есть ли в Linux полноценный аналог виндовой CreateProcess().
Я искал, есть разные ф-ции для работы с подпроцессами, но все они как-то предоставляют только те или иные возможности. Хотелось бы получать id, работать с перенаправлением вывода - пайпами, возможности ждать завершения процесса, возможности убить процесс итп. Что наиболее близко к по ф-ционалу CreateProcess() ?
0
|
|
| 18.04.2018, 11:40 | |
|
Ответы с готовыми решениями:
49
CreateProcess с совместимостью Win95 (програмно) кроссплатформенный аналог WinApi функций (CreateProcess) CreateProcess() |
|
|
|||
| 22.04.2018, 15:02 [ТС] | |||
|
Ну дайте ссылку на ман где это показано. Добавлено через 1 минуту
0
|
|||
|
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,929
|
|||
| 22.04.2018, 17:51 | |||
|
Вместо того чтобы кидаться дурацкими обвинениями и пытаться развести "на слабо" показывайте свой прогресс.
0
|
|||
|
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,929
|
||
| 22.04.2018, 22:37 | ||
|
Повторяю: я не собираюсь давать готовое решение. Учитесь наконец пользоваться документацией. Линуксовая документация это вам не msdn, там все просто. Команды документированы (и эта документация вшита в систему!), оперируют парой аргументов и отвечают только за то что им надо. В отличие от ужаса из msdn где у каждой команды десяток аргументов без вменяемых пояснений о назначении. Почитайте ман на pipe. Для чего используется, что принимает и что возвращает. Почитайте ман на fork: что происходит с дескрипторами открытых файлов. После этого покажите свое понимание как это должно работать.
0
|
||
|
|
|||||||
| 22.04.2018, 23:09 [ТС] | |||||||
|
Я задал довольно конкретный вопрос Вы же мне гоните порожняк, а потом удивляетесь.
К чему спрашивается? Я понимаю когда человек спрашивает что неконкретное и его гонят в гугл и в доку. Но вопрос вполне конкретен и однозначен. Не знает лучше промолчите. Добавлено через 3 минуты Допусти у меня есть моя программы мне из нее нужно вызвать какую нибудь стандартную утилиту туже ls или ping при чем не засерая в своей программе вывод и не задействуя файлов и прочих костылей. Но к примеру нужно вывести проанализированный вывод к примеру список файлов без всего лишнего или результат пинга. Добавлено через 9 минут Под виндой я делаю это приблизительно так:
Не по теме: Полный код тут https://github.com/Avazart/Bic... rocess.cpp
0
|
|||||||
|
Диванный эксперт
|
|||||||
| 23.04.2018, 00:13 | |||||||
|
Avazart,
dup2Алгоритм примерно следующий: В родителе:
первый попавшийся в гугле пример pipe fork dup2 exec
1
|
|||||||
|
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,929
|
||||
| 23.04.2018, 07:24 | ||||
|
0
|
||||
| 23.04.2018, 08:43 | |
|
0
|
|
|
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,929
|
|
| 23.04.2018, 10:06 | |
|
Поэтому надо читать документацию, читать код авторов этой ОС, а не побираться на форумах. Да еще с таким видом как будто ему должны. Вы же сами по первым ссылкам в гугле нашли готовый пример, что мешало ТСу сделать тоже самое?
. А так у меня была полностью симметричная ситуация. Пытался найти как через winapi настроить неблокирующие каналы (non-blocking pipes), чтобы если канал переполнился, программа не ждала его очистки, а сама решала что делать. Пару недель бился лбом в стену msdn'а и гугла, _потом_ спросил на форуме (за что какие-то неадекватные личности решили заминусовать). В конце концов плюнул и решил задачу через... ну, другим способом, в общем. А нормального решения так и нет. Не понимаю, виндузятники вообще неблокирующими каналами не пользуются что ли? Это к тому что даже для чужой операционки сначала поискать решение самому... или выяснить что задача какая-то нетипичная и стоит переформулировать подход.
0
|
|
|
|
|
| 23.04.2018, 15:11 | |
|
0
|
|
|
|
||||
| 23.04.2018, 15:54 [ТС] | ||||
|
http://man7.org/linux/man-page... awn.3.html Я как то тоже задавал тему по пайпам в этом разделе и Убежденный мне вполне помог.
0
|
||||
|
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,929
|
|||||||||
| 23.04.2018, 16:21 | |||||||||
|
pipe(fd) создает канал, причем на запись открывается файловый дескриптор fd[1], а на чтение - fd[0] fork() клонирует процесс, оставляя все файловые дескрипторы на своих местах, то есть открытые предыдущей командой fd[0] в родителе на чтение, fd[1] на запись, плюс fd[0] в потомке на чтение и fd[1] на запись. dup2(oldfd, newfd) добавляет открытому файлу новый дескриптор. В моем примере в качестве второго выступает stdout, а в качестве первого - открытый файл. Но никто не мешает вместо обычного файла подложить канал: dup(fd[1], STDOUT_FILENO); Потом закрываем все лишние дескрипторы: close(fd[1]); в родителе и close(fd[0]); close(fd[1]); в потомке. exec() подменяет вызывающий процесс на то что ему передано, не трогая открытых дескрипторов. ВСЕ! Вот весь код:
Не по теме: В то же время отсутствие вообще хоть какого-то кода, хотя бы попыток решения в этой теме это норма
0
|
|||||||||
|
|
|||||
| 23.04.2018, 16:29 [ТС] | |||||
|
Добавлено через 3 минуты "Не сработали" по тому что руки кривые, я всегда так говорю когда человек не показывает что делает, как исправил и что именно не сработало, никто не может телепатически угадать что Вы на гавнокодили что не работает. По тому коду который Вы выложили можно сказать что это именно так. Не приперались бы Вам бы указали конкретно в каких строчках кода ошибки и что не так. Добавлено через 2 минуты
0
|
|||||
|
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,929
|
||||
| 23.04.2018, 18:22 | ||||
man fork man exec man dup man pipe ?Повторяю: эти функции достаточно просты и независимы, в них нет десятка невнятных параметров. 80% кода было приведено мной ранее и дана подсказка вместо обычного файла подсовывать функции dup2() выхлоп функции pipe(). Я просто не представляю, как еще понятнее можно было подсказать, не приводя готового кода. Кроме того, в отличие от вас я привел свой вариант кода и попытки решения.
0
|
||||
|
|
||||
| 23.04.2018, 18:43 [ТС] | ||||
|
Кроме того если MSDN не помогает можно почитать книги, Убежденный Вам указал какую. Так же поискать в это книге Рихтера. Более того в Ваше коде который Вы выложили после так и не появилось проверок, а структура OVERLAPPED используется неправильно. Добавлено через 1 минуту http://man7.org/linux/man-page... awn.3.html чем не ссылка?
0
|
||||
|
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,929
|
||||
| 23.04.2018, 20:33 | ||||
|
Повторюсь: пусть и через задницу, но задача была решена еще в 6 посте, и с тех пор ничего лучше найдено не было.
0
|
||||
|
|
||||
| 23.04.2018, 20:42 [ТС] | ||||
|
Если Вы не поняли то что Вам сказали, то уж... Почему я так говорю про кривые руки, да потому что нормальный программист думает делает, анализирует результат - а не перебирает комбинации в надежде оно чудесным образом заработает. wine - это к все претензии разработчикам wine winXP - давно на помойке. Добавлено через 5 минут
0
|
||||
|
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,929
|
|||||
| 23.04.2018, 21:45 | |||||
|
Ну и отсутствие совместимости между версиями windows удручает.
0
|
|||||
|
|
||||||
| 23.04.2018, 22:38 [ТС] | ||||||
|
Очевидно что если у других работает, а у Вас нет ... Я же могу поспорить что книгу не читали. Добавлено через 1 минуту Но вообще это предсказуемо. Эмулятор есть эмулятор, тестировать нужно на реальной машине и на поддерживаемой системе. Добавлено через 37 секунд Добавлено через 8 минут Вам ранее говорили обрабатывать ошибки, Вы этого не делали. Обычно WinApi ф-ции возвращают определенный результат, в случае возникновения обычно ошибки стоит вызывать GetLastError() которая даст нам код ошибки, и затем код подставить FormatMessage() что бы получить текстовое описание ошибки. Так вот если делалось правильно Вы бы знали конкретно в чем причина. Я подозреваю что какая то трабла с путем/именем канала.
0
|
||||||
|
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,929
|
||||||
| 24.04.2018, 07:30 | ||||||
|
Отсюда вывод: на большинство компьютеров можно безболезненно поставить последнюю версию системы. Если не использовать особенности, реализованные в более поздних версиях, то проблем не возникает (разницу с winxp vs win7 сами видите: формально эти функции есть и там и там, по факту работает только в win7). Даже если проблема возникает, есть достаточно документации (опять же в отличие от winapi) чтобы это исправить. Или есть конкретный пример травмы детства? . В общем, пока не продемонстрируете что это у меня руки кривые и в документации было явно написано как это сделать. Ну примерно как с моим примером по pipe + fork + dup + exec. Вот тогда и приходите.
0
|
||||||
| 24.04.2018, 07:30 | |
|
Помогаю со студенческими работами здесь
40
CreateProcess CreateProcess CreateProcess CreateProcess CreateProcess Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
|
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
|
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2.
Данный документ берёт данные из другого нетипового документа. . .
|
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
|
|
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: реализовать программный контроль на предмет проведения документа. . .
|
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача:
1. Реализовать контроль заполнения реквизита. . .
|
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение:
DISM / Online / Add-Capability / CapabilityName:WMIC~~~~
Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
|
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: при создании документов установить период списания автоматически. . .
|