Danh mục tài liệu

Quản lý tiến trình trên Linux

Số trang: 11      Loại file: doc      Dung lượng: 53.00 KB      Lượt xem: 27      Lượt tải: 0    
Xem trước 2 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

Tiến trình là một môi trường thực hiện, bao gồm một phân đoạn lệnh vàmột phân đoạn dữ liệu. Cần phân biệt với khái niệm chương trình chỉ gồm tậphợp lệnh.Trên hệ điều hành Linux, tiến trình được nhận biết thông qua số hiệu của tiếntrình, gọi là pid. Cũng như đối với user, nó có thể nằm trong nhóm. Vì thế đểphân biệt ta nhận biết qua số hiệu nhóm gọi là pgrp.
Nội dung trích xuất từ tài liệu:
Quản lý tiến trình trên LinuxQuản lý tiến trình trên Linux Tiến trình là một môi trường thực hiện, bao gồm một phân đoạn lệnh vàmột phân đoạn dữ liệu. Cần phân biệt với khái niệm chương trình chỉ gồm tậphợp lệnh.Trên hệ điều hành Linux, tiến trình được nhận biết thông qua số hiệu của tiếntrình, gọi là pid. Cũng như đối với user, nó có thể nằm trong nhóm. Vì thế đểphân biệt ta nhận biết qua số hiệu nhóm gọi là pgrp. Một số hàm của C cho phéplấy được những thông số này:int getpid() : trả về giá trị int là pid của tiến trình hiện tạiint getppid() : trả về giá trị int là pid của tiến trình cha của tiến trình hiện tạiint getpgrp() : trả về giá trị int là số hiệu của nhóm tiến trìnhint setpgrp() : trả về giá trị int là số hiệu nhóm tiến trình mới tạo raVí dụ: Lệnh : printf(Toi la tien trinh %d thuoc nhom %d,getpid(),getgrp()); Kết quả sẽ là: Toi là tien trinh 235 thuoc nhom 231Tạo một tiến trình - lệnh fork int fork() tạo ra một tiến trình con. Giá trị trả lại là 0 cho tiến trình con vàdấu hiệu pid cho tiến trình cha. Giá trị sẽ là -1 nếu không tạo được tiến trìnhmới. Theo nguyên tắc cơ bản của hệ thống, tiến trình con và cha sẽ có cùngđoạn mã. Đoạn dữ liệu của tiến trình mới là một bản sao chép chính xác đoạndữ liệu của tiến trình cha. Tuy nhiên tiến trình con vẫn khác tiến trình cha ở pid,thời gian xử lý, ...Dừng một tiến trình Lệnh kill của Shell có thể dùng để chấm dứt hoạt động của một tiến trình.ví dụ như khi muốn dừng tiến trình 234 ta dùng lệnh: kill 234C cũng có lệnh kill như sau:int kill(pid, sig);int pid; là dấu hiệu nhận biết của một tiến trình.int sig; hằng tín hiệu giao tiếp tiến trình.Giao tiếp giữa các tiến trình Việc giao tiếp giữa các tiến trình được thực hiện thông qua các tín hiệuchuẩn của hệ thống. Tín hiệu là một sự ngắt quãng logic được gửi đến các tiếntrình bởi hệ thống để thông báo cho chúng về những sự việc không bình thườngtrong môi trường hoạt động của chúng (như lỗi bộ nhớ, lỗi vào ra). Nó cũng chophép các tiến trình liên lạc với nhau. Một tín hiệu (trừ SIGKILL) có thể đượcxem xét theo ba cách khác nhau:1. Tiến trình có thể được bỏ qua: Ví dụ chương trình có thể bỏ qua sự ngắtquãng của người sử dụng hệ thống (đó là sự bỏ qua khi một tiến trình đang đượcsử dụng ở phần nền.2. Tiến trình có thể được thực hiện: Trong trường hợp này, khi nhận được 1 tínhiệu, việc thực hiện 1 tiến trình được chuyển về một quy trình do người sửdụng xác định trước, sau đó trở lại nơi nó bị ngắt.3. Lỗi có thể được tiến trình trả về sau khi nhận được tín hiệu này.Dưới đây làmột số tín hiệu thường gặp:SIGHUP : Tín hiệu này được phát đến các tiến trình vào lúc cuối khi mà nó tựngắt.Nó cũng được phát đến mọi tiến trình có tiến trình chính tự ngắt.SIGINT : Tín hiệu này được phát đến các tiến trình khi ta ra lệnh ngắt.SIGQUIT : Tương tự như trên khi ta gõ vào ^D.SIGILL : Lệnh không hợp lệ, tín hiệu được phát ra khi phát hiện 1 lệnh khôngđúng ở cấp độ vật lý (ví dụ như 1 tiến trình thực hiện một lệnh mà máy tínhkhông có lệnh này).SIGTRAP : Tín hiệu được phát ra sau mỗi lệnh trong trường hợp tiến trình có sửdụng lệnh ptrace().SIGIOT : Bẫy được phát khi có các vấn đề về vật lý.SIGEMT : Bẫy của lệnh phát, được phát ra khi có lỗi vật lý trong khi thực hiện.SIGFPE : Được phát ra khi có lỗi về tính toán như một số có dấu phẩy nối cóđịnh dạng không hợp lý. Gần như luôn chỉ ra lỗi khi lập trình.SIGKILL : Trang bị để kết thúc tiến trình. Không thể bỏ qua hoặc cắt tín hiệunày.SIGBUS : Được phát khi gặp lỗi trên bus.SYSGEGV : Được phát ra khi gặp lỗi trên phân đoạn sự truy cập dữ liệu bênngoài phân đoạn dữ liệu được cấp phát cho tiến trình.SIGSYS : Đối số không đúng cho hệ thống gọi.SIGPIPE : Viết trên một ống dẫn không mở để đọc.SIGALRM : Phát ra khi đồng hồ của một tiến trình ngừng lại. Đồng hồ đượchoạt động bằng lệnh alrm().SIGTERM : Được phát ra khi một tiến trình kết thúc bình thường. Cũng có thểdùng để dừng 1 hệ thống để kết thúc tất cả các tiến trình hoạt động.Liên lạc giữa hai tiến trình Từ một chương trình đơn giản dưới đây sử dụng các lệnh phát và nhận tínhiệu, sau đó giúp liên lạc giữa hai tiến trình. Nội dung của ví dụ là sự liên lạc giữa một tiến trình cha và một tiến trìnhcon thông qua các tín hiệu đã được trình bày phần trước.Code:#include#includevoid fils_atc(){printf( Tien trinh bi loai bo !!! );kill(getpid(), SIGINT);}/***********************************/void fils(){signal(SIGUSR1, fils_atc);printf( Hinh thanh tien trinh moi. Nhung chuan bi loai bo tien trinh nay !! );while(1);}/******************************/main(){int ppid, pid;if ((pid = fork())==0) fils();else{sleep(3);printf( Chap nhan !! Tien trinh se bi loai bo. );kill(pid, SIGUSR1);}} Trong ví dụ trên, tiến trình con có sử dụng hàm signal(SIGUSR1, fils_atc).Hàm này có tác dụng mỗi khi tiến trình con nhận được tín hiệu SIGUSR1 thì hàmfils_atc() sẽ được thực ...