2015-07-17 4 views
-1

Я разработал бы демона, который можно контролировать с помощью команд оболочки. Чтобы уточнить, скажем, что у демона будет три функции (вызов, который я хотел бы иметь):c параметры среды выполнения daemon

$ myDaemon start # ничего, просто daemonize. выход (0) является успешным, выход (1) в противном случае

$ myDaemon stop #ask для демона для остановки. выход (0) является успешным, выход (1) в противном случае

$ myDaemon doSomething #ask для демона. exit (0) - это успех, выход (1) в противном случае (скажем, демона do int a = 0; exit (0), просто чтобы увидеть код, не интересующийся специальными материалами)

может кто-нибудь любезно показать мне пример о том, как создать этот демон (нормально, начало действительно просто ...)?

спасибо всем!

+0

Здесь вы идете: http://www.netzmafia.de/skripten/unix/ linux-daemon-howto.html – Philip

+0

Спасибо, Филипп, но это полезное руководство, которое вы указываете (действительно хорошо, в любом случае), не отвечает на мои поиски ионов. Мне нужно нечто вроде «$ myDaemon doSomething». Мне нужен механизм для передачи моим командам демона и ждать ответов (IPC). –

+0

Аргументы командной строки, вероятно, сделают трюк: http://www.gnu.org/software/libc/manual/html_node/Parsing-Program-Arguments.html#Parsing-Program-Arguments. Если вы хотите, чтобы ваша программа принимала входные данные, сделайте что-то, а затем верните результат и выйдите, то вы действительно не смотрите на демона, так же как обычную обычную программу, которая принимает входные данные и выдает вывод. Вы уверены, что вам нужно, чтобы программа постоянно работала в фоновом режиме? – Philip

ответ

0

Если вы действительно хотите, чтобы демон выполнял всю работу, один из способов - написать программу терминала, чтобы передать все команды от терминала к демону с помощью какой-либо технологии IPC.

Все, что вам нужно сделать, это:

  • Написать терминальную программу, которая разветвляется, а затем execl демон вместе с аргументами командной строки (как файл дескрипторов при использовании труб).
  • Затем терминальная программа принимает входной сигнал в цикле от терминала и передает их демону через используемый механизм IPC.

EDIT

Алгоритм основного процесса

main() 
{ 
    > fork the daemon with some initial arguments(if any) 
    while(1) 
    { 
     > take inputs from the shell 
     > parse the input and pass it to daemon(via preferred mechanism) 
     > if(exit condition) kill->daemon and break 
    } 
} 

Для демона

main() (or function_name() if no execl) 
{ 
    > initialize the arguments and IPC mechanism 
    while(1) 
    { 
     > read command(can use simple integer/character commands) 
     > perform requested action or break if exit command 
    } 
    > proper exit(closing file descriptors,etc.) 
} 
+0

Спасибо Рахул. Демон готов. То, что мне нравится, это то, что я использую таким образом: 1) $ myDaemon # он запускается, он вилки, я возвращаюсь к schell 2) $ .... k) $ myDaemon doSomething # is aleardy active (проход 1), но я могу передать ему некоторые команды, когда основной процесс завершен, а разветвленный остается активным k + 1) ... –

+0

Спасибо Рахул. Демон готов.То, что мне нравится, это то, что я использую таким образом: 1) $ myDaemon # он запускается, он вилки, я возвращаюсь к schell k) $ myDaemon doSomething # это aleardy active (проход 1), но я могу пройти ему некоторые команды, когда основной процесс завершен, и разветвленный остается активным j) $ myDaemon stop # командует демонам останавливаться как сказать, я вижу, что это просто так: я разбираю аргументы, если «начать» «Я создаю демона и выхожу, если« остановить », я могу убить демона, если« что-то делать », я могу отправить сообщение через TCP/IP на демона .. (но не по TCP) –

+0

Я включил алгоритм, если это помогает. –

Смежные вопросы