SORU
21 Mart 2011, PAZARTESİ


nasıl bir işlem daemon yapmak

Nasıl bir program daemon yapabilir miyim anlamaya çalışıyorum.Karşılaştığım bazı şeyler genel Olarak, program bir daemon olmak için aşağıdaki adımları gerçekleştirir:

  1. fork( ) Ara.
  2. Ebeveyn, exit( ) Ara. Bu orijinal (daemon üst sağlar büyükbaba) çocuk sonlandırıldı memnun, daemon üst olduğu yok daemon süreç grup lideri olmayan çalışan uzun, ve. Bu son nokta bir sonraki adım başarılı bir şekilde tamamlanması için gereklidir.

  3. Ara setsid( ), daemon yeni işlem grubu ve oturumu vererek, her iki lider olarak var olan. Bu süreç ilişkili olduğunu da sağlar kontrol terminal (işlem sadece yeni bir oturum oluşturulur ve atamaz bir).

  4. chdir( )) kök dizini çalışma dizini değiştirin. Bu yapılır miras çalışma dizini herhangi bir dosya sistemi olabilir çünkü. Cinleri sistemin çalışma süresi boyunca çalıştırmak eğilimindedir, ve istemiyorum rastgele bir dizin açık tutun, ve bir yönetici engellemesi için ayırma dosya sistemi dizin içeren.

  5. Tüm dosya tanımlayıcıları yakın.

  6. Açık dosya, 0, 1, 2 (standart, standart, standart hata)tanımlayıcıları ve /dev/null onları yönlendirmek.
#include <sys/types.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <linux/fs.h>

int main (void)
{
    pid_t pid;
    int i;

    /* create new process */
    pid = fork ( );  
    if (pid == -1)  
        return -1;  
    else if (pid != 0)  
        exit (EXIT_SUCCESS);  

    /* create new session and process group */  
    if (setsid ( ) == -1)  
        return -1;  

    /* set the working directory to the root directory */  
    if (chdir ("/") == -1)  
        return -1;  

    /* close all open files--NR_OPEN is overkill, but works */  
    for (i = 0; i < NR_OPEN; i  )  
        close (i);  

    /* redirect fd's 0,1,2 to /dev/null */  
    open ("/dev/null", O_RDWR);  
    /* stdin */  
    dup (0);  
    /* stdout */  
    dup (0);  
    /* stderror */  

    /* do its daemon thing... */  

    return 0;  
}

Biraz daha derinlemesine bu süreci ben de beni Apaçi gibi bazı program mevcut kaynak kodu için bir link verebilir.

CEVAP
21 Mart 2011, PAZARTESİ


Basit bir daemon yazmak için nasıl bir örnek Linux Daemon Writing HOWTO mevcuttur.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Phandroid

    Phandroid

    26 Ocak 2009
  • TitaniumBackup

    TitaniumBack

    10 EYLÜL 2011
  • wafflepwn

    wafflepwn

    14 AĞUSTOS 2008