Công cụ bảo vệ mã nguồn .NET mạnh nhất, không thể unpack, miễn phí cho các khách hàng đầu tiên đăng ký.
Từ 1 tới 1 trên tổng số 1 kết quả

Đề tài: Tutorial Deamon trong Unix

  1. #1
    Ngày gia nhập
    07 2006
    Bài viết
    121

    Mặc định Tutorial Deamon trong Unix

    Tutorial Deamon
    Daemon là một tiến trình đặc biệt được chạy trong chế độ background, và thường cung cấp các dịch vụ. Các tiến trình daemon thường bắt đầu vào thời điểm boot hệ thống và được chạy đến khi hệ thống được tạm nghỉ. Tất cả các daemon đều có các thuộc tính của một tiến trình thông thường.

    Fork
    Việc đầu tiên tiến trình daemon cần làm là tạo ra một tiến trình con bằng lệnh gọi fork. Sau khi các tiến trình con được tạo, cả hai tiến trình con và tiến trình cha đồng chạy hai chương trình giống nhau cùng một lúc. Một tiến trình deamon sẽ cắt đứt liên hệ với chính nó từ tiến trình cha và đẩy nó chạy trong chế độ background.

    Create New Session
    Bước tiếp theo là tạo một phiên làm việc mới, việc tạo ra một phiên làm việc mới đáp ứng cho ta một số lợi ích sau đây: Tiến trình sẽ trở thành một session leader của một nhóm tiến trình mới, và tiến trình sẽ không có trình điều khiển thiết bị đầu cuối.

    Close file descriptors
    Tiến trình con kế thừa môi trường của nó từ tiến trình cha. Nếu tiến trình cha có mở một số thẻ file. Tiến trình con sẽ có một bản sao của các thẻ file này.

    Change the current working directory
    Ngoài các thẻ file, tiến trình con còn kế thừa thư mục làm việc hiện hành. Nếu thư mục hiện hành được lắp vào trong hệ thống file, thì hệ thống file sẽ không có thể được tháo ra.

    Set file mode creation mask
    Mặt nạ chắn quyền được kế thừa từ tiến trình cha, và có thể được thiết lập để cấm, và cấp quyền.

    Handle child Exit status
    Nếu tiến trình daemon fork các tiến trình con để quản lý các đòi hỏi daemon phải quản lý tính hiệu SIGCHLD của tiến trình con hoặc tiến trình con sẽ trở thành zombie.
    A Sketeton Daemon Funtion

    The handle_sigcld Function
    Nhắc lại nếu không lấy lại trạng thái exit code của tiến trình con, tiến trình con sẽ trở thành tiến trình zombie. Một tiến trình cha có thể tránh tạo ra các tiến trình zombie bởi việc cài đặt handle_sigcld để nắm bắt tính hiệu SIGCLD khi một tiến trình con kết thúc.

    Code:
    void handle_sigcld(){
    	int pid;
    	int status;
    	while((pid=wait3(&status, WNOHANG,(struct rusage* )NULL))<0);
    }
    + Chú ý: hàm handle_sigcld gọi lời gọi hệ thống wait3 như WNOHANG. Điều này làm tiến trình cha tiếp tục thực thi và không dừng lại chờ tiến trình chờ tiến trình con kết thúc.

    The init_daemon Function
    C Code:
    1. void init_daemon(){
    2.     int childpid=0;
    3.     int fd=0;
    4.     struct rlimit max_files;
    5.     /*
    6. ** Tạo ra một tiến trình con
    7. */
    8. if((childpid=fork())<0) {
    9.     /*Quản lý: điều kiện lỗi tạo tiến trình con*/
    10.     exit(-1);
    11. }else if(childpid>0) {
    12.     /* Đoạn mã tiến trình cha ta thực hiện việc kết thúc nó*/
    13.     exit(0);
    14. }
    15. /* Bây giờ thực thi như một tiến trình con*/
    16. /* Tạo session mới leader session*/
    17. setsid();
    18. /*
    19. ** Đóng tất cả các thẻ file, cần thiết lấy tối đa số lượng các file
    20. **được mở từ getrlimit.
    21. */
    22. bzero(&max_files,sizeof(struct rlimit));
    23. getrlimit(RLIMIT_NOFILE,&max_file);
    24. for(fd=0;fd<max_files.rlim_max;fd++){
    25.     close(fd);
    26. }
    27. /*
    28. **Chuyển thư mục hiện hành về root
    29. */
    30. chdir(/);
    31. /*
    32. **Thiết lập lại mặc nạ chắn quyền
    33. */
    34. umask(0);
    35. /*
    36. ** Thực hiện bắt tính hiệu SIGCHLD để tránh sự xuất hịên các tiến trình
    37. ** deamon
    38. */
    39. signal(SIGCHLD,handle_sigcld);
    40. }
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.
    Đã được chỉnh sửa lần cuối bởi shinichi_haha : 29-06-2007 lúc 07:39 PM.

    OoShinHaoO

Các đề tài tương tự

  1. Tutorial - Tạo một chương trình MFC đơn giản trong VC++ 2008 bằng hình ảnh
    Gửi bởi Tadius trong diễn đàn Tutorials và Thủ thuật Visual C++
    Trả lời: 16
    Bài viết cuối: 21-11-2013, 10:36 PM
  2. Lập trình C Xác định kích thước Buffer của pipe trong Unix?
    Gửi bởi sunshinetpu trong diễn đàn Thắc mắc lập trình C/C++ trên Linux
    Trả lời: 1
    Bài viết cuối: 04-10-2012, 02:29 AM
  3. Xin C manual Unix
    Gửi bởi Mr.Quit trong diễn đàn Giải trí - Thư giãn
    Trả lời: 2
    Bài viết cuối: 16-04-2012, 01:11 PM
  4. Viết chương trình C dùng được pipes trong Unix
    Gửi bởi dasblue trong diễn đàn Thắc mắc lập trình C/C++ trên Linux
    Trả lời: 4
    Bài viết cuối: 12-07-2011, 08:52 AM
  5. Ubuntu là Linux hay Unix?
    Gửi bởi nthung trong diễn đàn Thắc mắc chung
    Trả lời: 11
    Bài viết cuối: 05-12-2009, 08:32 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn