![]() |
|
Модераторы: xvr |
![]()
|
|
| Zerstroer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 285 Регистрация: 8.8.2007 Где: Алма-Ата Репутация: нет Всего: 3 |
Возник вопрос в эту тему.
Использую execl(). Задача - последовательный запуск двух процессов. (2 приложения в исполнаяемых файлах). Код:
После компилляции (В NetBeans все делаю) запускаю скомпиленое приложение с правами root из под консоли. Получаю сообщение "ошибка сегментирования". С чем связано? Неправильное использование функции? -------------------- In silico |
|||
|
||||
| vinick |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 285 Регистрация: 9.6.2005 Репутация: 4 Всего: 22 |
Во-первых правильный вызов должен быть таким
Во-вторых, в случае успешного выполнения exec никогда не возвращает управление, так что второй вызов execl у вас будет сделан только если первый закончился неудачей. |
|||
|
||||
| svlary |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 207 Регистрация: 8.9.2009 Репутация: 4 Всего: 4 |
Смотрим man на ececl :
Теперь все понятно ? Т.е. первый элемент ДОЛЖЕН указывать на ИМЯ ФАЙЛА ! |
||||
|
|||||
| Zerstroer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 285 Регистрация: 8.8.2007 Где: Алма-Ата Репутация: нет Всего: 3 |
Спасибо! Возник резонный вопрос: каким образом из одной программы можно запустить 2 и более приложений? -------------------- In silico |
|||
|
||||
| vinick |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 285 Регистрация: 9.6.2005 Репутация: 4 Всего: 22 |
||||
|
||||
| Zerstroer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 285 Регистрация: 8.8.2007 Где: Алма-Ата Репутация: нет Всего: 3 |
Благодарю!
man fork - мне в помощь! Добавлено через 14 минут и 5 секунд Проверьте пожалуйста синтаксис:
Таким образом используется? -------------------- In silico |
|||
|
||||
| Zerstroer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 285 Регистрация: 8.8.2007 Где: Алма-Ата Репутация: нет Всего: 3 |
-------------------- In silico |
|||
|
||||
| Zerstroer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 285 Регистрация: 8.8.2007 Где: Алма-Ата Репутация: нет Всего: 3 |
И все же...
-------------------- In silico |
|||
|
||||
| vinick |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 285 Регистрация: 9.6.2005 Репутация: 4 Всего: 22 |
примерно так:
|
|||
|
||||
| Zerstroer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 285 Регистрация: 8.8.2007 Где: Алма-Ата Репутация: нет Всего: 3 |
Почему-то запускает только один процесс.
Использовал код который привел vinick а так же свой вариант:
В моем случае запускается только proc1 (тот, что родительский). А требуется запуск 2х процессов. Это сообщение отредактировал(а) Zerstroer - 8.10.2009, 11:10 -------------------- In silico |
|||
|
||||
| Zerstroer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 285 Регистрация: 8.8.2007 Где: Алма-Ата Репутация: нет Всего: 3 |
Оба процесса в обоих случаях запускается. Как сделать так, что бы управление оставалось в программе? следить за pid и за ppid?
Это сообщение отредактировал(а) Zerstroer - 8.10.2009, 13:22 -------------------- In silico |
|||
|
||||
| svlary |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 207 Регистрация: 8.9.2009 Репутация: 4 Всего: 4 |
В КАКОЙ - программе ?! После завершения системного вызова execl "старой" программы уже в памяти нет! Ее сегмент кода замещен кодом из файла, который Вы указали в вызове execl. Поэтому, (на тот случай, если системный вызов не сработал) сразу после вызова нужно ставит строки : /* Возврат из вызова execl однозначно указывает на ошибку */ syslog(LOG_CRIT, "Error at execl(%s) %m", proc_name); exit(EXIT_FAILURE); |
|||
|
||||
| massiv |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 27.9.2009 Репутация: нет Всего: нет |
не совсем понятно, зачем вам следить за тем што происходит с процессми запущенными execl, после запуска оин начинаюит жить своей жизнью. Другое дело , если вы хотитите заставить родительский процесс делать ещё што то помимо создания 2-х дочерних процессов, наспимер дождаться завершения одного из дочерних порцессов. В таком случае што вам мешает это сделать? Пишите нужный ком в родительском и всё, like that:
|
||||||
|
|||||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
massiv,
ясно же написано: каждая функция из семейства функций exec* может возвращать ошибку -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| Zerstroer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 285 Регистрация: 8.8.2007 Где: Алма-Ата Репутация: нет Всего: 3 |
Спасибо всем, уважаемые, задача была выполена. Реализация найдена.
-------------------- In silico |
|||
|
||||
![]()
|
| Правила форума "С/С++: Программирование под Unix/Linux" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |