LINUX.ORG.RU

в тени


0

0

если запускать прогу из терминала, то этот терминал должен быть включён, чтобы прога не завершала работу??

вобщем смысл в чём: мне нужно сделать так, чтобы программа(сервер) работала в фоновом режиме, управлять я ей буду из другой проги через TCP

так вот, как это осуществить? (фоновый режим)

Re: в тени

ну пацан до Линукса дорвался... :)

тут есть как минимум 2 варианта:

* просто запустить программулину в терминале через, скажем, nohup. В этом случае это будет просто программа, отключённая от своего терминала.

* создать демона (зловещий хохот)... примерно как сервис в Виндовсах (звук битого стекла). Но тута всё гораздо сложнее...

Pi ★★★★★ ()

Re: в тени

... и не плоди темы - задай все тебя волнующие вопросы в одной ветке

Pi ★★★★★ ()
Ответ на: Re: в тени от vasist

Re: в тени

последняя книга на русском кстати дёшево стоит: я за неё ~140р плотил (и это не в России) "Программирование для Линукс. Прпфессиональный подход" называется.

Pi ★★★★★ ()
Ответ на: Re: в тени от Pi

Re: в тени

Ой да ладно... чё там трудного-то в демонизме? или я что-то пропустил,
и у данного товарисча всё совсем только начинается в *никс системах?

если коротко... то там надо-то только форкнуться :)

для автора топика... простейший "демон" :))

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <errno.h>

int main(int argc, char **argv)
{
pid_t *ch_pid;

ch_pid = fork();

if (ch_pid == -1)
{
perror("ACHTUNG!!!");
exit(errno);
}

if (ch_pid == 0) /* это означает, что следующий блок
кода будет выполняться в дочернем процессе */
{
demand_func(); /* какая-либо функция,
которая будет собсно
выполняться в фоне...
что-то типа mainloop`а */
}

return 0;
}

ну вот что-то типа этого... не так и сложно... другой вопрос, если ты зохочешь создать несколько дочерних процессов, да плюс тебе ещё надо будет реализовать взаимодействие/синхронизацию между этими процессами, тогда надо читать доки по IPC... но я думаю тебе пока хватит этого :) а вообще тебе правильные книжки посоветовали... так что учи англецкий, и фперёд! :0) Удачи!

Cy6erBr4in ★★★ ()
Ответ на: Re: в тени от Teak

Re: в тени

Ненене... это не по-спортивному :)) человек хочет научиться программировать под линукс... ну или *никс, не суть... пусть основы попробует... а так конечно... можно и nohup или тем же screen`ом воспользоваться :)

Cy6erBr4in ★★★ ()
Ответ на: Re: в тени от Cy6erBr4in

Re: в тени

Кстати по теме... например функция popen... конечно... не поспоришь, она удобна... но если говорить о "секьюрности", то рекомендуют самому своять подобное через pipe+fork+dup =) и ничего... никто ещё не умер... кто хотел, тот юзал popen, кто хотел разобраться, тот сам всё это реализовывал :)

Cy6erBr4in ★★★ ()
Ответ на: Re: в тени от Cy6erBr4in

Re: в тени

Это ненастоящий демон. Еще нужно, для полной кошерности сказать setsid(), close(0); close(1); close(2); chdir(/);

anonymous ()
Ответ на: Re: в тени от Cy6erBr4in

Re: в тени

>Дада... а ещё надо pid файл где-нить в /var/run создать ;)

Путаем соленое с тяжелым. setsid и закрытие потоков НЕОБХОДИМО.

Вы ведь не хотите получать на консоли сообщения об ошибках демона?

roller ★★★ ()
Ответ на: Re: в тени от roller

Re: в тени

> Вы ведь не хотите получать на консоли сообщения об ошибках демона?

Хрен с ними, с сообщениями. Основная идея закрытия std* - при попытках (из библиотек, например) туда записать мы не получим SIGPIPE. И наш демон не подвиснет если кто-то вдруг попытается прочитать с stdin-а.

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.