Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Linux daemon 
:(
    Опции темы
Feniksa
Дата 22.7.2007, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 12.6.2007

Репутация: нет
Всего: нет



Возникла задача такого плана. Нужно что бы приложение стало демоном (то есть можно было писать такое : service myservice start) 

И что бы от терминала моё приложение отвезалось.
Подскажите, в какую сторону мне рыть (на какую тематику) - терминальный ввод-вывод либо процессы.
PM MAIL   Вверх
mahoro
Дата 22.7.2007, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 1.7.2007

Репутация: нет
Всего: нет



man 3 daemon

А если вручную, то закрыть STDIN, STD[out,err], и сделать fork. 

И, кроме того, можно вообще ничего не переделывать и запускать программу следующим образом:

nohup program 2>&1 >/dev/null

PM MAIL   Вверх
Dragon
Дата 23.7.2007, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 10.8.2006
Где: Киев

Репутация: нет
Всего: нет



Пример конвенционного Linux демона :

Примечание: 
1. Демон должен перехватывать все сигналы определенные в системе, которые можно перехватить. Возможно даже SIGSEGV, но это спорный вопрос smile
2. Вместо главного цикла демона (while(true) ) может быть цикл ожидания сетевого event'а и т.п. Если используется бесконечный цикл, нужны sleep'ы

Код

#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include <errno.h>
#include <string>

#include <sys/types.h>
#include <sys/stat.h>

#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

#include <signal.h>
#include <syslog.h>

#include <unistd.h>

using namespace std;

const char *pidFileName = "/var/run/krosavchegd.pid";

void sigTerm(int)
{
    syslog(LOG_INFO, "POKA Krosavchegi!!! Bu-ga-ga!");
    exit(EXIT_SUCCESS);
}

int main(int argc, char *argv[])
{
    // Read and parse configuration file
    syslog(LOG_INFO, "Preved Krosavchegi!!!");
    
    // //////////////////////// //////////////////////// //////////////////////// //////////////////////// //////////////////////// //////////////////////
    // Fork off the parent process
    pid_t pid = fork();
    if(pid < 0)            exit(EXIT_FAILURE);    
    else    if(pid > 0)        
    {
        // Create PID file of child process
        FILE *pPidFile = fopen(pidFileName, "w");
        if(pPidFile == NULL)    syslog(LOG_WARNING, "Cannot create PID file: %s", pidFileName);
        else
        {
            fprintf(pPidFile, "%d\n", pid);
            fclose(pPidFile);
        }
        
        exit(EXIT_SUCCESS);
    }
    
    // Change file mode mask
    umask(0);
    
    // Create a new SID for the child process
    pid_t sid = setsid();
    if(sid < 0)            exit(EXIT_FAILURE);
    
    // Change the current working directory
    if((chdir("/")) < 0)    exit(EXIT_FAILURE);
        
    // Close out the standard file descriptors
    close(STDIN_FILENO);    
    close(STDOUT_FILENO);    
    close(STDERR_FILENO);
    
    // Set signal handlers
    signal(SIGTERM, sigTerm);
    
    short _goingOutgoing = 0;
    while(true)
    {
        if(_goingOutgoing%2)
            syslog(LOG_INFO, "Medved ushel... Bu-ga-ga!!!");
        else
            syslog(LOG_INFO, "Medved prishel... Bu-ga-ga!!!");
                 
        _goingOutgoing++;        
        usleep(10000000);
    }
    
    exit(EXIT_SUCCESS);
}

PM MAIL ICQ   Вверх
Feniksa
Дата 23.7.2007, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 12.6.2007

Репутация: нет
Всего: нет



mahoro

Dragon, а с медведем прикольно smile БУ ГА ГА smile 

Спасибо... попробую

Это сообщение отредактировал(а) Feniksa - 23.7.2007, 22:07
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0962 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.