Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > демонизация программы.


Автор: phpsc 12.1.2011, 21:53
Программа демонизируется если её запустить с терминала вручную от рута. 
Выполняет свои функции:
1держит соединение с mysql/
2.создание файлов и папок.
Код

// CREATE PROCESS
pid_t pid,sid;
    
pid = fork();    
if (pid<0) {exit(EXIT_FAILURE);}
        else if (pid>0) {exit(EXIT_SUCCESS);}
sid = setsid();
if (sid<0) { exit(EXIT_FAILURE);}


Если записать в автозапуск в файл /etc/rc.local , то при перезагрузке она висит в процессах.
1держит соединение с mysql/ ВЫПОЛНЯЕТ
2.создание файлов и папок. НЕВЫПОЛНЯЕТ

В чем может быть проблема?

Автор: TimberWolf 12.1.2011, 23:11
Цитата(phpsc @  12.1.2011,  21:53 Найти цитируемый пост)
1держит соединение с mysql/ ВЫПОЛНЯЕТ
2.создание файлов и папок. НЕВЫПОЛНЯЕТ

В приведенном вами исходном коде этого вообще нет. А нет вопроса - нет ответа. Процесс-демон вы делаете неверно. Необходимо "избавиться" от сигналов, связанных с терминальным вводом-выводом (SIGTTIN, SIGTTOUT итд), а также закрыть все файловые дескрипторы.

Автор: boostcoder 12.1.2011, 23:34
думал раньше кинуть эту ссылку: http://forum.try-catch.ru/index.php?topic=265.0
но подумал что ТС откажется, со словами что все сложно))

Автор: phpsc 13.1.2011, 00:00
boostcooder, спец конечно))

но при попытке компиляции той программы с ссылки данном bostcooder'ом
выдаются:
g++ dae.cpp -I /usr/include/mysql -L /usr/lib/mysql/ -lmysqlclient
dae.cpp: In function ‘int main(int, char**)’:
dae.cpp:62: error: invalid conversion from ‘const void*’ to ‘void*’
dae.cpp:65: error: invalid conversion from ‘const void*’ to ‘void*’

Натолкните на мысль куда "рыть" :=(

Автор: boostcoder 13.1.2011, 00:03
Цитата(phpsc @  13.1.2011,  00:00 Найти цитируемый пост)
boostcooder, спец конечно))

я только учусь)

Цитата(phpsc @  13.1.2011,  00:00 Найти цитируемый пост)
dae.cpp:62: error: invalid conversion from ‘const void*’ to ‘void*’
dae.cpp:65: error: invalid conversion from ‘const void*’ to ‘void*’

что в этих строках?

Автор: phpsc 13.1.2011, 00:07
несповпадение типов данных.. плохо понимаю, но похоже что переменнцю хотим записать указатель. в общем, не знаю, какое то несовпадение типов.
thread_args.reread_arg = "reread_arg";
нужно привести к нужному типу? в данном случае записать как указатель в памяти?

p.s: как на экзамене....сидишь и тупо ничего не понимаешь.

Автор: boostcoder 13.1.2011, 00:10
Цитата(phpsc @  13.1.2011,  00:07 Найти цитируемый пост)
thread_args.reread_arg = "reread_arg";

thread_args.reread_arg = (void*)"reread_arg";

константность нужно убрать.

Автор: phpsc 13.1.2011, 00:20
узнаю новое))

теперь при компиляции в терминале выдает следующее:
gcc dae.cpp
Цитата
/tmp/ccWqheOg.o: In function `main':
dae.cpp:(.text+0x6ed): undefined reference to `pthread_sigmask'
dae.cpp:(.text+0x75c): undefined reference to `pthread_create'
/tmp/ccWqheOg.o:(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status

и исполняемый файл не создается :-(

Какую либу нужно подлюкчить при компиляции? это ведь ошибки линковки?

Автор: boostcoder 13.1.2011, 00:38
Цитата(phpsc @  13.1.2011,  00:20 Найти цитируемый пост)
Какую либу нужно подлюкчить при компиляции?

-lpthread

Цитата(phpsc @  13.1.2011,  00:20 Найти цитируемый пост)
это ведь ошибки линковки?

угу smile 

Автор: phpsc 13.1.2011, 00:49
boostcoder, пожалуйста ответь на вопрос, надеюсь он будет последним 

gcc dae.cpp -I /usr/include/mysql -L /usr/lib/mysql/ -lmysqlclient -lpthread
Цитата
/tmp/ccqdySPX.o:(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status
еще одной либы нет? но какой? я не умею определять их по названиям :-(

Автор: boostcoder 13.1.2011, 01:04
Цитата

g++ dae.cpp -I /usr/include/mysql -L /usr/lib/mysql/ -lmysqlclient -lpthread

Автор: phpsc 13.1.2011, 01:17
ммммда)))
boostсoder профи!

С предоставленным исходными кодами от boostcoder'a моя программа успешно : создает файлы и папки опрашивая бд mysql.
И делает программа это даже при старте системы debian. Файл с программой запускается из /etc/rc.local.

Автор: fish9370 13.1.2011, 11:02
помечай вопрос решенным, и не имей привычки форкать темы без надобности, 
я об этом: http://forum.vingrad.ru/forum/topic-319747.html

Автор: phpsc 13.1.2011, 14:54
ответ на вопрос получен..программа успешно работает как демон.

Автор: phpsc 13.1.2011, 14:54
ответ на вопрос получен..программа успешно работает как демон.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)