2015-01-12 1 views
1

Мне нужно создать демон в c, который работает в фоновом режиме, но не выполняет его задачу, пока я не запрошу его.создайте демона в c, который работает в фоновом режиме, но не выполняет его задачу, пока я не запрошу его

Только для примера; Я создал демона, который при запуске будет выполнять команду

du -h --max depth=3 

на /home и выводит его в файл. Однако я хочу, чтобы демон выполнялся в фоновом режиме и не выполнял эту задачу, пока я не запрошу ее.

Я признаю, что это звучит бессмысленно, но у меня есть набор программ, которые я хочу объединить в одного демона, который выполняет задачи по запросу.

Любые советы или примеры по этому поводу приветствуются.

Большое спасибо,

+1

Это не звучит бессмысленно, вы можете создать демон с 'вилкой()', могут создать домен Сокет для связи с ним, если вы на Linux, вы можете также попробуйте с 'dbus'. Бессмысленная часть - это то, почему демон запускал внешние программы?Я предполагаю, что вы не на MS Windows, из-за 'du -h -maxdepth = 3', о котором я понятия не имею, есть ли эквивалент Windows. –

+0

['echo 'du -h ...' | сейчас] (http://pubs.opengroup.org/onlinepubs/009695299/utilities/at.html)? – pilcrow

ответ

1

Если вы пишете его в C, и вы на системе UNIX, используйте daemon() LibC вызов раскошелиться демона. Он позаботится обо всех деталях nitty, которые должным образом дезабилизируют ваш процесс.

Чтобы дождаться события, выберите любой тип взаимодействия между процессами, который вы хотите, и прочитайте сообщение с этого механизма, используя чтение блокировки. Например, ваш демон мог дождаться сообщения, которое должно быть получено через named pipe.

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

Если вы хотите выполнить действие с некоторым интервалом, используйте timer_fd.

+0

Спасибо. У меня есть еще кое-что, что нужно сделать, но ты поместил меня на правильный путь. – user3455075

+0

Небольшой бит педантизма: 'daemon()' не является стандартным Unix, хотя Linux, BSD и Solaris имеют его. Я не вижу его в документации для AIX, – Davislor

0

«Однако я хочу, чтобы демон работать в фоновом режиме и не выполнить эту задачу, пока я не прошу его .»

Одно из возможных решений:

Когда вы раскошелиться процесс создания ребенка процесс, напишите его PID (PID ребенка) в файл. Это будет полезно для использования сигнализации для вашего процесса демона. Вы можете использовать SIGUSR1 для выполнения своей задачи. Напишите обработчик сигналов для SIGUSR1 в вашем процессе daemon, чтобы выполнить задачу, о которой вы говорите. Чтобы управлять своей задачей или запускать задачу, когда вы ее запрашиваете, вы должны просто отправить сигнал (SIGUSR1 в этом случае) на демон. Когда демон получит этот сигнал, он выполнит свой обработчик сигнала, который будет задачей, которую вы определили для выполнения. Пока вы не отправите этот сигнал, задача не будет выполнена.

Сигнал может быть послан как это:

убить (PID, SIGUSR1) // Прочитайте PID Демона из файла (который вы ранее написанное в, после того, как разветвление)

Таким образом, ваш главный процесс может прочитать PID из файла и отправить сигнал демону, который затем начнет выполнение указанной задачи.

Для тех, кто считает, что это полезно

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

  • Нет связанных вопросов^_^