HỆ ĐIỀU HÀNH LINUX (Nội dung) HỆ ĐIỀU HÀNH LINUX (Quản lý tiến trình) Phạm Nguyên Khang, Đỗ Thanh Nghị Email pnkhang,dtnghi@cit ctu edu vn Nội dung Tiến trình Thực thi Tạo tiến trình Các hàm cơ bản kh[.]
HỆ ĐIỀU HÀNH LINUX (Quản lý tiến trình) Phạm Nguyên Khang, Đỗ Thanh Nghị Email: pnkhang,dtnghi@cit.ctu.edu.vn Nội dung Tiến trình Thực thi Tạo tiến trình Các hàm khác Thực thi chương trình chế độ Liệt kê tiến trình Các hàm quản lý tiến trình khác Tiến trình Tiến trình = chương trình thực thi Ảnh nhớ (memory image) bao gồm: Text: mã thực thi chương trình Data: lưu trữ liệu Stack: ngăn xếp người dùng Định danh: phân biệt tiến trình với chương trình khác Cấu trúc u (user: người dùng) Ngăn xếp (stack) hệ thống Vùng định danh truy xuất chế độ hệ thống (system mode) Thực thi Điều khiển tiến trình (sched swapper) Tiến trình (khơng) khơng gian hệ thống Sử dụng CPU theo mức độ ưu tiên tiến trình Tiến trình thực thi chế độ người dùng (user mode) chuyển sang chế độ hệ thống hàm đặc biệt nhân Chỉ có tiến trình chạy khơng gian hệ thống: trình quản lý nhớ ảo (pagedaemon) Tạo tiến trình fork: Ví dụ: (viết ngơn ngữ C) Tạo tiến trình pid = fork(); cách chép vùng if (pid == -1) { nhớ tiến trình cha /*l i*/ỗ } else if (pid == 0) { Kết trả về: /*mã l nh chệ ương trình } else { /*mã l nh chệ ương trình con*/ -1 thất bại cha */ N tiến trình tiến trình cha với N PID (định danh) } tiến trình cha Các hàm khác exec: Thay ảnh nhớ nội dung file thực thi khác wait: Chờ tất tiến trình kết thúc exit: Kết thúc tiến trình kill: Gởi tín hiệu đến tiến trình (thường dùng để đồng tiến trình buộc tiến trình kết thúc) signal: Chọn cách xử lý phải thực hiên nhận tín hiệu pipe: Tạo ống dẫn để giao tiếp hai tiến trình Chế độ Mặc định tiến trình thực thi (foreground), tiến trình thực xong đến tiến trình khác Ví dụ: người dùng gõ lệnh date (hiển thị ngày hệ thống) Shell tạo tiến trình (sử dụng hàm fork) Chờ tiến trình kết thúc (dùng hàm wait) Trong chương trình gọi thực thi lệnh /bin/date (bằng lệnh exec) Để thực thi tiến trình chế độ (background) ta thêm dấu & vào cuối lệnh Ví dụ: người dùng gõ lệnh date& Shell tạo tiến trình (fork) Khơng chờ tiến trình kết thúc Tiến trình gọi thực thi lệnh /bin/date (bằng lệnh exec) Tiến trình cha tiến trình chạy song song Có thể kế hiển thị bị lẫn lộn (vì sử dụng chung hình) Tạm dừng tiến trình Các trạng thái tiến trình active (đang hoạt động), waiting (chờ), … Trạng thái tạm dừng = tiến trình bị ngắt có khả chạy lại cách sử dụng lệnh fg (chạy lại chương trình chế độ foreground) bg (chạy lại chương trình chế độ background) Tạm ngưng chương trình cách gõ Ctrl + Z Mục đích: Thực thi chương trình khác mà khơng cần phải kết thúc tiến trình chạy Liệt kê tiến trình ps: Các OPTIONS Liệt kê tiến trình thực thi -a: hiển thị tiến trình user Hiển thị tất thuộc tính tiến liên kết tới tty trình -e (-A): hiển thị tất tiến trình Mặc định liệt kê tiến trình -f: hiển thị PID tiến trình cha người dùng thời điểm bắt đầu Cú pháp: ps [OPTIONS] -l: tương tự –f Ví dụ: a: hiển thị tiến trình users ps liên kết tới tty ps l x: hiển thị tiến trình ngoại trừ ps aux (liệt kê tất tiến trình) tiến trình controlling tty (e.g /sbin/mingetty tty*) u: dạng hiển thị hướng đến người dùng Ví dụ: ps –ux Liệt kê tiến trình 10 Các lệnh khác ang thực thi 11 Các lệnh khác kill: Gởi tín hiệu đến tiến trình Cú pháp: kill [-signal | -s signal] pid Các signal 0 HUP (hangup) INT (tương đương CTRL + C) KILL (buộc kết thúc) TERM 15 (mặc định, kết thúc êm ái) STOP 19 (tạm dừng, tương đương CTRL + Z) Ví dụ: kill -1 1234 kill -s 3456 kill -l (gởi tín hiệu HUP đến tiến trình 1234) (gởi tín hiệu KILL đến tiến trình 3456, buộc tiến trình kết thúc) liệt kê tất tín hiệu id = -1 có nghĩa tất tiến trình trừ tiến trình kill tiến trình init Các lệnh khác Tránh HUP: nohup Tiến trình nhận tín hiệu HUP người dùng logout khỏi session Sử dụng nohup để bỏ qua tín hiệu HUP Ví dụ: nohup find / –name log.txt& Các lệnh khác jobs: Liệt kê tất job gồm Tiến trình thực thi chế độ Tiến trình tạm ngưng Tiến trình bị ngẽn (chờ vào/ra) Chú ý: job có số hiệu job (khác với định danh tiến trình) Các lệnh bg, fg, kill làm việc với số hiệu job thay pid Để sử dụng số hiệu job ta dùng % nice: Chạy chương trình với độ ưu tiên Cú pháp: nice –n Độ ưu tiên từ -20 (ưu tiên cao nhất) đến 19 (ưu tiên thấp nhất) Độ ưu tiên mặc định = Ví dụ: nice -n 12 xcalc Các lệnh khác renice: Thay đổi độ ưu tiên tiến trình Cú pháp: renice -n -p Hoặc: renice Ví dụ: renice 4567 Chú ý: người dùng bình thường khơng thể thay đổi độ ưu tiên nhỏ (không)