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

Поиск:

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


Опытный
**


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

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



(OS Sun Solaris)
Есть программка, которая прослушивает порт с определенным номером и записывает в файл Ip адрес и доменное имя того, кто подключается к этому порту.
Можно ли сделать так, чтобы она работала в фоновом режиме?
И как потом её завершить?
PM MAIL   Вверх
dvm
Дата 22.4.2005, 16:06 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











если я тебя правильно понял..
запусти ее с & в конце
только когда из консоли будешь выходить выходи через exit
убить прогу можно ессно через kill или killall
  Вверх
Leksey
Дата 22.4.2005, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Спасибо dvm, я просто думал что & передается как параметр коммандной строки и его должен обрабатывать программист.
А нет ли более гуманнного способа убить прогу?
PM MAIL   Вверх
bilbobagginz
Дата 22.4.2005, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

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



а есть ли "гуманный" способ убить человека ?
ну так... чтобы не очень грустно было ....
smile



--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
Leksey
Дата 22.4.2005, 21:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Я имею в виду можно ,например, задать таймер, чтобы через некоторое время она закрывалась?
И как это сделать?
PM MAIL   Вверх
Chuck
Дата 23.4.2005, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Сушня
**


Профиль
Группа: Эксперт
Сообщений: 442
Регистрация: 12.12.2003
Где: Узбекистан, Ташке нт

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



Цитата
Я имею в виду можно ,например, задать таймер, чтобы через некоторое время она закрывалась?

МожнО smile
Повесить на crond задание, чтоб он убил сам killall прогу через час smile
PM MAIL WWW GTalk   Вверх
Leksey
Дата 23.4.2005, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Chuck не мог ты про crond подробнее рассказать.Что за зверь и чем питается?

PM MAIL   Вверх
bilbobagginz
Дата 25.4.2005, 01:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

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



Лексей. cron - это хронический демон. он делает задания по таблице crontab периодически, как указано в таблице. у каждого юзера есть ящик скриптов cron, их редактируют с помощью команды:
crontab -e
просматривают с помощью crontab -l
не каждый юзер по умолчанию в соляре имеет право запускать такую штуку.
выкури man crontab




--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
admsasha
Дата 25.4.2005, 02:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



а можно вот так, да ? smile
Код

    if((childpid = fork()) == -1){
        perror("fork");
        exit(1);
    }
    if(childpid == 0){
        close(fd[0]);
    }else{
        close(fd[1]);
        printf("Ушел в фоновый режим \n");
        exit (1);
    }

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


Опытный
**


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

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



admsasha Можно поподробнее, ПОЖАЛУЙСТА. smile
PM MAIL   Вверх
admsasha
Дата 26.4.2005, 02:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

#include <fstream>

int main(){
    pid_t   childpid;
    int     fd[2];

    if((childpid = fork()) == -1){
        perror("fork");
        exit(1);
    }
    if(childpid == 0){
        close(fd[0]);
    }else{
        close(fd[1]);
        exit (1);
    }

    // а тут делай что хочешь
    //все будет работь уже в фоне
    return 0;
}



незнаю на сколько так грамотно, но код рабочий smile
Уважаемые Эксперты, поправте мой код, как грамотно этот код написать, может что дополнительно закрывать надо ?

Это сообщение отредактировал(а) admsasha - 26.4.2005, 02:09
PM MAIL WWW ICQ Jabber   Вверх
AndrK
Дата 13.7.2006, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(admsasha @ 26.4.2005,  02:09)
Код

#include <fstream>

int main(){
    pid_t   childpid;
    int     fd[2];

    if((childpid = fork()) == -1){
        perror("fork");
        exit(1);
    }
    if(childpid == 0){
        close(fd[0]);
    }else{
        close(fd[1]);
        exit (1);
    }

    // а тут делай что хочешь
    //все будет работь уже в фоне
    return 0;
}



незнаю на сколько так грамотно, но код рабочий smile
Уважаемые Эксперты, поправте мой код, как грамотно этот код написать, может что дополнительно закрывать надо ?

Не вкурил... а в массиве fd у тебя че???
И че мы закрываем??? 
PM MAIL   Вверх
GrayCardinal
Дата 14.7.2006, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

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



Цитата
Не вкурил... 

smile
Цитата
И че мы закрываем???

А черт знает. Смотря с какими флагами собрать. Если без оптимизации, то скорее всего stdin. 
Цитата
незнаю на сколько так грамотно, но код рабочий

 smile 

Цитата
Можно поподробнее

Код

/*
 * (c) Oleg Puchinin 2006 
 * [email protected]
 */

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main (int argc, char ** argv)
{
    int pid;
    int fd = open ("/dev/null");

    if (fd < 0) {
        perror ("open /dev/nulL");
        return -1;
    }
        
    pid = fork ();
    if (pid < 0) {
        perror ("fork");
        return -1;
    }
        
    if (pid == 0) {
        dup2 (fd, 0);
        dup2 (fd, 1);
        dup2 (fd, 2);
        chdir ("/");    

        execlp ( ... );
    } else 
        return 0;
}
  

Это сообщение отредактировал(а) GrayCardinal - 14.7.2006, 16:23


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


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



А разве на соляре команда man не работает?!? Или нет страниц 2 и 3 уровней? Человек пишет прогу, работающую с сокетами (а как еще слушать порт?), а не знает элементарных вещей.
man fork: http://unixhelp.ed.ac.uk/CGI/man-cgi?fork+2 - это команда, которая позволяет запускать "демоны" из самой программы (а точнее, она создает копию вызвавшего процесса).


GrayCardinal, зачем нужно копировать стандартные потоки? Разве fork это сама не делает? Может правильнее их закрывать? 
PM   Вверх
GrayCardinal
Дата 15.7.2006, 06:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

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



bsa
Цитата
 Разве fork это сама не делае

Так dup2 :
1. _Закрывает_ второй аргумент.
2. Копирует на его место _первый_ аргумент. В данном случае fd (/dev/null) 
В результате stdin/stdout/stderr получается /dev/null.  Кто-то про маны говорил. Хе-хе. smile 
 


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

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

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


 




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


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

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